Filter 在LDAP搜索筛选器/查询中使用通配符

Filter 在LDAP搜索筛选器/查询中使用通配符,filter,active-directory,ldap,wildcard,Filter,Active Directory,Ldap,Wildcard,我在AD和LDAP查询方面的知识非常有限,因此我有一个关于如何使用通配符的简单问题 假设存在显示名为“ITSM-问题管理”的对象 我当前使用通配符实现的过滤器如下所示: (displayName=SEARCHKEYWORD*) 如果用户输入关键字“Problem”,他将无法找到对象,因为它需要名称的第一部分,即“ITSM-” 我想在两端实现通配符,如下所示: (displayName=*SEARCHKEYWORD*) 理想情况下,这将允许输入“问题”,并让it搜索“ITSM-问题管理”。但当

我在AD和LDAP查询方面的知识非常有限,因此我有一个关于如何使用通配符的简单问题

假设存在显示名为“ITSM-问题管理”的对象

我当前使用通配符实现的过滤器如下所示:

(displayName=SEARCHKEYWORD*)
如果用户输入关键字“Problem”,他将无法找到对象,因为它需要名称的第一部分,即“ITSM-”

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

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


关于如何解决这个问题,有什么想法吗?如有任何意见,将不胜感激。谢谢

至少根据MSDN网络上的文章,这应该是可行的

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

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

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

带有尾随*的筛选器参数几乎可以通过索引查找即时计算。前导*表示通过索引进行顺序搜索,因此它是O(N)。这需要很长时间


我建议您重新考虑该要求。

您最好的选择是预测前缀,因此:

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

笨重,但我在我的组织内也在做类似的事情。

您应该通知目录管理员您打算使用子字符串筛选器以确保目录服务器的配置正确。另请参见。出于好奇,“ITSM”代表什么?我知道一个特定的ITSM,但我怀疑它是否与您的相同…@ErikE对我在回复中的延迟表示歉意,ITSM=it服务管理。IT操作的管理策略和流程:)我尝试了上面的过滤器来搜索一个特定的对象,因为我输入了整个名称,搜索需要很长时间。我认为这永远不会解决。EJP关于前导通配符可能需要很长时间的评论可能是正确的。感谢您的回复,谢谢!:)看起来你的通配符是对的,花了很长时间,我搜索了一个特定的对象的全名,但它仍然没有解决搜索问题,我认为它永远不会解决。非常感谢。我一直都在使用这种搜索,这样就可以了,只需按ObjectClass进行如下筛选:
(&(ObjectClass=Person)(cn=*关键字*)
@ManuelGutierrez时间仍然是O(N),但由于额外的
ObjectClass
过滤器,您现在处理的是一个较小的N。