在LDAP搜索过滤器/查询中使用通配符

时间:2012-03-05 09:14:43

标签: filter active-directory ldap wildcard

我对AD和LDAP查询的知识非常有限,所以我对如何使用通配符有一个简单的问题。

假设有一个对象的displayName为“ITSM - 问题管理”

我当前使用通配符实现的过滤器是这样的:

(displayName=SEARCHKEYWORD*)

如果用户输入关键字“问题”,他将无法找到该对象,因为它需要名称的第一部分,即“ITSM - ”

我想在两端实现通配符,如下所示:

(displayName=*SEARCHKEYWORD*)

理想情况下,这将允许输入“问题”并让它搜索“ITSM - 问题管理”。但是当你把它放在开头时,通配符似乎不起作用。当我尝试它时,它似乎挂起并且没有返回任何结果。

关于如何解决此问题的任何想法或想法?任何意见都将受到高度赞赏。谢谢!

3 个答案:

答案 0 :(得分:25)

带有尾随*的过滤器参数几乎可以通过索引查找立即评估。前导*意味着通过索引进行顺序搜索,因此它是O(N)。这需要很长时间。

我建议你重新考虑这个要求。

答案 1 :(得分:7)

你最好的选择是预测前缀,所以:

"(|(displayName=SEARCHKEY*)(displayName=ITSM - SEARCHKEY*)(displayName=alt prefix - SEARCHKEY*))"

笨拙,但我在组织内做了类似的事情。

答案 2 :(得分:1)

这应该有效,至少根据MSDN网络上的Search Filter Syntax文章。

你注意到的“挂断”可能只是一个延迟。尝试使用较窄的范围运行相同的查询(例如,测试对象所在的特定OU),因为如果针对所有AD对象运行它,可能需要很长时间才能进行处理。

您也可以尝试将过滤器分为两部分:

(|(displayName=*searchstring)(displayName=searchstring*))