我对AD和LDAP查询的知识非常有限,所以我对如何使用通配符有一个简单的问题。
假设有一个对象的displayName为“ITSM - 问题管理”
我当前使用通配符实现的过滤器是这样的:
(displayName=SEARCHKEYWORD*)
如果用户输入关键字“问题”,他将无法找到该对象,因为它需要名称的第一部分,即“ITSM - ”
我想在两端实现通配符,如下所示:
(displayName=*SEARCHKEYWORD*)
理想情况下,这将允许输入“问题”并让它搜索“ITSM - 问题管理”。但是当你把它放在开头时,通配符似乎不起作用。当我尝试它时,它似乎挂起并且没有返回任何结果。
关于如何解决此问题的任何想法或想法?任何意见都将受到高度赞赏。谢谢!
答案 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*))