D.4. 搜索国际目录

在执行搜索操作时,Directory 服务器可以根据服务器具有支持组合顺序的任何语言对结果进行排序。有关目录支持的合并顺序列表,请参阅 第 D.2 节 “支持的区域设置”
注意
执行国际化搜索需要 LDAPv3 搜索。因此,不要对 ldapsearch 的调用设置 LDAPv2 选项。
本节重点介绍使用匹配的规则过滤器返回国际属性值。有关常规 ldapsearch 语法的详情请参考 第 14.3 节 “LDAP 搜索过滤器”

D.4.1. 匹配规则格式

国际化的匹配规则过滤器可以通过以下几种方式表示,使用哪个是首选性:
  • 作为区域整合顺序的 OID,用于基础搜索。
  • 作为与协调顺序关联的语言标签,用于基础搜索。
  • 作为 Collation order 的 OID,以及一个代表关系运算符的后缀。
  • 作为与协调顺序关联的语言标签,以及一个代表关系运算符的后缀。
在以下部分中讨论每个选项的语法:

D.4.1.1. 将 OID 用于匹配规则

Directory 服务器支持的每个区域都有一个关联的合并顺序 OID。有关目录服务器支持的 OID 列表,请查看 /etc/dirsrv/config/slapd-collations.conf 文件。
合并顺序 OID 可以在匹配规则过滤器的匹配规则部分中使用,如下所示:
 attr:OID:=(relational_operator value)
关系运算符包含在字符串的值部分,用单个空格与值分开。例如,要在 Swedish collation 顺序搜索位于 N4709 的所有 departmentNumber 属性,请使用以下过滤器:
departmentNumber:2.16.840.1.113730.3.3.2.46.1:=>= N4709

D.4.1.2. 为匹配规则使用语言标签

目录服务器支持的每个区域设置都有一个关联的语言标签。有关 Directory 服务器支持的语言标签列表,请查看 /etc/dirsrv/config/slapd-collations.conf 文件。
语言标签可用于匹配规则过滤器的匹配规则部分,如下所示:
 attr:language-tag:=(relational_operator value)
关系运算符包含在字符串的值部分,用单个空格与值分开。例如,要使用西班牙语排序搜索所有带有 estudiante 值的 description 属性的目录,请使用以下过滤器:
cn:es:== estudiante

D.4.1.3. 为匹配规则使用 OID 和后缀

作为使用关系运算符值对的替代选择,将代表特定运算符的后缀附加到过滤器匹配规则部分中的 OID 中。将 OID 和后缀组合在一起,如下所示:
 attr: OID+suffix:=value
注意
这个语法仅由 mozldap 工具支持,而不支持 OpenLDAP 工具,如 ldapsearch
例如,要以 German collation 顺序搜索带有值 softwareproduktebusinessCategory 属性,请使用以下过滤器:
businessCategory:2.16.840.1.113730.3.3.2.7.1.3:=softwareprodukte
上例中的 .3 是相等的后缀。
有关目录服务器支持的 OID 列表,请查看 /etc/dirsrv/config/slapd-collations.conf 文件。有关关系运算符及其等效后缀的列表,请参阅 表 D.2 “搜索类型、Operator 和后缀”

D.4.1.4. 为匹配规则使用语言标签和后缀

作为使用关系运算符值对的替代选择,将代表特定运算符的后缀附加到过滤器匹配规则部分中的语言标签。组合语言标签和后缀,如下所示:
 attr: language-tag+suffix:=value
注意
这个语法仅由 mozldap 工具支持,而不支持 OpenLDAP 工具,如 ldapsearch
例如,要以法语排序搜索位于 La Salle 的所有 surnames,请使用以下过滤器:
sn:fr.4:=La Salle
有关 Directory 服务器支持的语言标签列表,请查看 /etc/dirsrv/config/slapd-collations.conf 文件。有关关系运算符及其等效后缀的列表,请参阅 表 D.2 “搜索类型、Operator 和后缀”

D.4.2. 支持的搜索类型

目录服务器支持以下类型的国际搜索:
  • 相等性(=)
  • substring (*)
  • greater-than (>)
  • greater-than 或 equal-to (>=)
  • less-than (<)
  • less-than 或 equal-to (<=)
大约或电话号码和存在搜索仅在英语中被支持。
与常规 ldapsearch 搜索操作一样,国际搜索使用运算符来定义搜索类型。但是,在调用国际搜索时,可以在过滤器的匹配规则部分中使用标准运算符(=、>=、>、<=),或者使用特殊的运算符类型,称为后缀(不与目录后缀混淆),在过滤器的匹配规则部分。表 D.2 “搜索类型、Operator 和后缀” 总结了每种搜索类型、运算符和等同的后缀。

表 D.2. 搜索类型、Operator 和后缀

搜索类型 Operator 后缀
less-than < .1
less-than 或 equal-to <= .2
相等 = .3
greater-than 或 equal-to >= .4
greater-than > .5
子字符串 * .6

D.4.3. 国际搜索示例

以下小节介绍了如何对目录数据执行国际搜索的示例。每个示例都提供了所有可能的匹配规则过滤器格式,以便您可以熟悉格式并选择最适合的匹配规则过滤器格式。

D.4.3.1. less-Than 示例

使用 less-than 运算符(<)或后缀(.1)执行特定于区域的搜索,或以特定 collation 顺序搜索在给定属性之前的所有属性值。
例如,要搜索在西班牙语订购中的 surname Marquez 之前的所有 surnames,以下任何匹配的规则过滤器都可以正常工作:
sn:2.16.840.1.113730.3.3.2.15.1:=< Marquez
...
sn:es:=< Marquez
...
sn:2.16.840.1.113730.3.3.2.15.1.1:=Marquez
...
sn:es.1:=Marquez

D.4.3.2. less-Than 或 Equal-to Example

使用 less-than 或 equal-to 操作符(<=)或后缀(.2)搜索特定区域属性的所有属性值,以特定协调顺序搜索在给定属性下的所有特定于区域的搜索。
例如,要搜索在 Hungarian 合作顺序的 CZ422 空间号或之前的所有空间号,以下匹配规则过滤器可以正常工作:
roomNumber:2.16.840.1.113730.3.3.2.23.1:=<= CZ422
...
roomNumber:hu:=<= CZ422
...
roomNumber:2.16.840.1.113730.3.3.2.23.1.2:=CZ422
...
roomNumber:hu.2:=CZ422

D.4.3.3. 相等示例

使用与运算符(=)相同的区域搜索,或后缀(.3)以特定匹配顺序搜索与给定属性匹配的所有属性值。
例如,要搜索所有带有值为 softwareprodukte 值的 businessCategory 属性(在过期顺序),以下匹配规则过滤器可以正常工作:
businessCategory:2.16.840.1.113730.3.3.2.7.1:==softwareprodukte
...
businessCategory:de:== softwareprodukte
...
businessCategory:2.16.840.1.113730.3.3.2.7.1.3:=softwareprodukte
...
businessCategory:de.3:=softwareprodukte

D.4.3.4. greater-Than 或 Equal-to Example

执行一个特定与本地化的搜索,使用大于或等于运算符 (>=) 或后缀 (.4) 搜索根据一个特定的 collation 顺序位于给定属性或属性后的所有属性值。
例如,要以法语排序顺序搜索 Québec 间或之后的所有本地化,以下任何匹配的规则过滤器都将正常工作:
locality:2.16.840.1.113730.3.3.2.18.1:=>= Québec
...
locality:fr:=>= Québec
...
locality:2.16.840.1.113730.3.3.2.18.1.4:=Québec
...
locality:fr.4:=Québec

D.4.3.5. 更大的示例

使用较大的操作符(>)或后缀(.5)执行特定于区域搜索的搜索,以特定并发顺序搜索给定属性的所有属性值。
例如,要在主机 schranka4 后以 Czech collation 顺序搜索所有邮件主机,以下任何匹配的规则过滤器都将正常工作:
mailHost:2.16.840.1.113730.3.3.2.5.1:=> schranka4
...
mailHost:cs:=> schranka4
...
mailHost:2.16.840.1.113730.3.3.2.5.1.5:=schranka4
...
mailHost:cs.5:=schranka4

D.4.3.6. 子字符串示例

执行国际子字符串搜索,按指定顺序搜索与给定模式匹配的所有值。
例如,要搜索以中文 协调 顺序结束的所有用户 ID,以下任何匹配规则过滤器都可以正常工作:
uid:2.16.840.1.113730.3.3.2.49.1:=* *ming
...
uid:zh:=* *ming
...
uid:2.16.840.1.113730.3.3.2.49.1.6:=* *ming
..
uid:zh.6:=* *ming
使用 DN 值属性(如 modifiersNamememberOf )的子字符串搜索过滤器在过滤器包含一个或多个空格字符时并不总是正确匹配条目。
要临时解决这个问题,请使用过滤器中的整个 DN 而不是子字符串,或者确保过滤器中的 DN 子字符串从 RDN 边界开始;也就是说,请确保它以 DN 的 type= 部分开头。例如,不应使用这个过滤器:
(memberOf=*Domain Administrators*)
但是其中任何一个将正常工作:
(memberOf=cn=Domain Administrators*)
...
(memberOf=cn=Domain Administrators,ou=Groups,dc=example,dc=com)