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

时间:2011-01-26 17:31:47

标签: ldap

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

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

dn: cn=joe,ou=people,dc=company,dc=com
cn: joe
Food: pizza
Food: beer
Food: wings

所以我们可以看到Joe真的很喜欢披萨,啤酒和翅膀。

然后让我们说我希望将Joe与其他喜欢披萨,啤酒和/或翅膀的用户匹配,但不喜欢喜欢布鲁塞尔豆芽或花椰菜的用户。

是否有一个搜索过滤器在Food属性中返回带有一个或多个“pizza”,“beer”和“wings” - 而没有其他的条目?

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

(|(Food=pizza)(Food=beer)(Food=wings))

但是如何告诉它排除那些除了这三个以外的任何值的条目?

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

2 个答案:

答案 0 :(得分:1)

如果"除了那三个以外的任何值"已知且有限,你可能正在寻找这样的东西:

(&(|(Food=pizza)(Food=beer)(Food=wings))(|(!(Food=cauliflower))(!(Food=sprouts))))

基本上,你制作一个复合过滤器,上面写着"它的披萨或啤酒或翅膀或它们的任意组合,它不是花椰菜或豆芽。"

我不确定是否有一个很棒的方式可以说,"它只是披萨或啤酒或翅膀或它们的任意组合。"我能想象的最好方法是创建一个包含所有可能值的极其冗长的过滤器。也许别人知道更好的方法?

答案 1 :(得分:0)

否定此过滤器会起作用吗?

(&(!(Food=pizza))(!(Food=beer))(!(Food=wings))

这样你得到(!(&(!(Food=pizza))(!(Food=beer))(!(Food=wings)))

我怀疑这是否有效。不确定它是否会起作用......