Ldap 我可以在多值属性中搜索只有*个特定值的条目吗?

Ldap 我可以在多值属性中搜索只有*个特定值的条目吗?,ldap,Ldap,假设LDAP模式有一个名为“Food”的属性,它存储人们最喜欢的食物。它是一个多值属性,因此可以为一个人列出许多不同的值 此类条目的部分转储可能如下所示: dn: cn=joe,ou=people,dc=company,dc=com cn: joe Food: pizza Food: beer Food: wings (&(|(Food=pizza)(Food=beer)(Food=wings))(|(!(Food=cauliflower))(!(Food=sprouts)))) 所

假设LDAP模式有一个名为“Food”的属性,它存储人们最喜欢的食物。它是一个多值属性,因此可以为一个人列出许多不同的值

此类条目的部分转储可能如下所示:

dn: cn=joe,ou=people,dc=company,dc=com
cn: joe
Food: pizza
Food: beer
Food: wings
(&(|(Food=pizza)(Food=beer)(Food=wings))(|(!(Food=cauliflower))(!(Food=sprouts))))
所以我们可以看到乔非常喜欢比萨饼、啤酒和鸡翅

然后让我们假设我想让Joe与其他同样喜欢比萨饼、啤酒和/或鸡翅的用户相匹配,但不喜欢布鲁塞尔芽甘蓝或花椰菜的用户

是否有一个搜索过滤器可以返回食物属性中包含一个或多个“比萨饼”、“啤酒”和“翅膀”而没有其他内容的条目

第一部分,寻找这三个值中的任何一个或全部,很简单:

(|(Food=pizza)(Food=beer)(Food=wings))
但是我如何告诉它排除除这三个值以外的任何值的条目呢

显然,我可以对搜索结果进行后期处理,并手动抛出任何具有错误值的条目,但如果可以避免的话,我宁愿不这样做。

如果“除这三个值以外的任何值”是已知的且有限的,您可能正在寻找类似的内容:

dn: cn=joe,ou=people,dc=company,dc=com
cn: joe
Food: pizza
Food: beer
Food: wings
(&(|(Food=pizza)(Food=beer)(Food=wings))(|(!(Food=cauliflower))(!(Food=sprouts))))
基本上,你制作了一个复合过滤器,上面写着“它是比萨饼、啤酒、鸡翅或它们的任何组合,而不是花椰菜或豆芽。”


我不确定是否有一种很好的方式可以说,“它只是比萨饼、啤酒、鸡翅或它们的任何组合。”我能想象的最好的方式是创建一个包含所有可能值的极其详细的过滤器。也许其他人知道更好的方法?

否定此过滤器是否有效

(&(!(食物=比萨饼))(!(食物=啤酒))(!(食物=翅膀))

这样你就可以得到
(!(&(!(食物=比萨饼))(!(食物=啤酒))(!(食物=翅膀))


我怀疑这在任何方面都是有效的。不确定它是否会起作用…

我只是用芽菜和花椰菜作为愚蠢的例子;我并不是想暗示不合格值是提前知道的。我想排除包含除“比萨饼”、“啤酒”或“鸡翅”以外的任何食物的条目,不管那些食物是什么。很高兴知道。在这种情况下,我不得不推荐geoffc下面的方法,实验性的。我没有一个方便的LDAP来测试这个,但他的过滤器看起来可能会工作。