如何在ldap上优化搜索?

时间:2014-12-16 15:31:50

标签: algorithm ldap openldap ldap-query

我的组织的ldap中有一个只读用户使用openldap实现,我不完全知道树的结构,但我知道对象下面有很多组织单位bogota,medellin,palmira,(而这又低于组织xxx.edu.co)。我对在第二级组织(博格塔,麦德林,帕米拉)下面的每个uid组织单位中使用另一个名为employeeNumber的属性的人people感兴趣。我可以通过以下方式实现这一目标:

ldapsearch -h secret.xxx.edu.co -D 'uid=myUser,ou=Institucional,o=bogota,o=xxx.edu.co' -w myPass -x -b 'ou=People,o=bogota,o=xxx.edu.co' '(&(employeeNumber=123485))'

这个问题就是效率,因为我的组织有40000多名用户,搜索速度非常慢,如果我使用uid进行搜索,搜索速度非常快,我猜这棵树完全是由'uid'或类似的东西。关键在于uid正是我的目标,另外我知道我搜索的人的uid的近似形式,例如我知道如果我正在为PepitoPérez搜索employeeNumber = 12345的uid,这必须从'p'开始。

如何在这个问题上取得更好的成绩?

我认为类似于在索引的uid属性中通过regexp过滤树,并且在搜索此子集中的employeeNumber之后可以具有良好的性能。我需要一种不需要ldap管理员权限的方法。

1 个答案:

答案 0 :(得分:0)

听起来您需要在equality属性中添加employeeNumber索引。这将使您的上述搜索与uid搜索一样好。

如果您想有效地进行部分uid匹配,则需要substring属性上的uid索引。

除此之外,您的过滤器(&(employeeNumber=123485))可以简单地表示为(employeeNumber=123485)。由于只有一个条款,因此不需要and (&)

如果您有适当的索引,可以使用这样的过滤器执行搜索...

(&(employeeNumber=123485)(uid=p*))

这会让你得到你想要的。