2011-01-26 48 views
1

比方说,LDAP模式有一个名为“食物”的属性,它存储人们最喜欢的食物。这是一个多值属性,因此可以为一个人列出许多不同的值。我可以搜索在多值属性中只有*特定值的条目吗?

一个这样的条目的部分转储可能是这样的:

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

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

然后我们假设我想让Joe与其他享受披萨,啤酒和/或翅膀的用户相匹配,但不喜欢那些享用比如说抱子甘蓝或菜花的用户。

是否有一个搜索过滤器返回一个或多个“披萨”,“啤酒”和“翅膀”的条目 - 而没有别的 - 在食物属性?

第一部分,寻找任何或所有这三个值,很简单:

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

但我怎么告诉它排除其具有比其他三个任意值的条目?

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

回答

1

如果“任何其他值大于三”是已知的,有限的,你可能会寻找这样的事情:

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

基本上,你犯了一个复合过滤器,说:“这是比萨饼或啤酒或翅膀或这些的任何组合,并且它不是花椰菜或豆芽。“

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

+0

我只是用豆芽和花椰菜作为愚蠢的例子;我不是故意暗示不合格的价值是事先知道的。我想排除包含除“披萨”,“啤酒”或“翅膀”之外的任何食物的条目,无论这些食物是什么。 – 2011-01-27 15:36:05

0

否定此过滤器的工作?

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

使您得到(!(&(!(Food=pizza))(!(Food=beer))(!(Food=wings)))

我怀疑这是在任何方面有效。不知道它是否会工作...

相关问题