Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用openldap进行近似搜索_Ldap_Openldap - Fatal编程技术网

使用openldap进行近似搜索

使用openldap进行近似搜索,ldap,openldap,Ldap,Openldap,我正在尝试编写一个搜索,查询运行openldap的目录服务器 用户将使用他们感兴趣的人的名字或姓氏进行搜索 我发现重音字符有问题(比如áíóú),因为名字和姓氏都是用西班牙语写的,所以正确的方法是pérez,为了便于搜索,它可以写为Perez,而不带重音 如果我使用”(cn=*Perez*)”我只得到非重音的结果 如果我使用”(cn=*pérez*)”我只会得到强调的结果 如果我使用'(cn=~Perez)我会得到奇怪的结果(或者至少没有我可以使用的东西,因为虽然结果同时包含Perez和pér

我正在尝试编写一个搜索,查询运行openldap的目录服务器

用户将使用他们感兴趣的人的名字或姓氏进行搜索

我发现重音字符有问题(比如
áíóú
),因为名字和姓氏都是用西班牙语写的,所以正确的方法是
pérez
,为了便于搜索,它可以写为
Perez
,而不带重音

如果我使用
”(cn=*Perez*)”
我只得到非重音的结果

如果我使用
”(cn=*pérez*)”
我只会得到强调的结果

如果我使用
'(cn=~Perez)
我会得到奇怪的结果(或者至少没有我可以使用的东西,因为虽然结果同时包含
Perez
pérez
两个实例,但我也会得到一些显然与查询无关的结果

在西班牙语中,这种情况经常发生……不管是懒散,不管你想叫它什么,事实是,对于这种事情,人们往往不写重音,因为假设所有这些搜索都可以同时使用这两种选项(我猜,既然谷歌允许,每个人都认为它应该是这样工作的)


除了更新数据库、删除所有重音符号并在查询中修剪它们之外……你能想出另一种解决方案吗?

你的~和=在上面进行了交换。应该是(cn~=Perez)。我仍然不知道这会有多好。Soundex一直都很奇怪。因为许多属性都是多值的,包括cn,所以您可以在属性上存储第二个值,该属性将扩展字符转换为其基本版本。您至少可以在需要时保留原始值。您还可以设置并在转换后的值前面加上前缀,然后使用valuesReturnFilter将其从结果中过滤出来

#Sample object
dn:cn=Pérez,ou=x,dc=y
cn:Pérez
cn:{stripped}Perez
sn:Pérez
#etc.
然后修改查询以使用or表达式

(|(cn=Pérez)(cn={stripped}Perez))
您将包括一个valuesReturnFilter,它看起来像

(!(cn={stripped}*))
有关详细信息,请参阅RFC3876。添加请求控件的方法因用于访问目录的平台/库而异。

搜索筛选器(“查询”)由指定

编码: 实际上要求过滤器(间接定义)是 ,即ASCII 8字节字符串: 是八进制字符串, 和
是LDAPString,LDAPString是一个八位组字符串。

转义标准:使用“\”替换特殊字符 (,示例)。 引述:

该规则确保整个筛选器字符串为 有效的UTF-8字符串,并提供表示 ASCII字符“*”(ASCII 0x2a),“(“(ASCII 0x28),”)”(ASCII 0x29)、“\”(ASCII 0x5c)和NUL(ASCII 0x00)是 表示为反斜杠“\”(ASCII 0x5c),后跟两个十六进制数字 表示编码的八位字节的值。
此外,您可能应该替换所有在语义上修改过滤器的字符(RFC 4515的语法提供了一个列表),并用通配符(*)替换非ASCII字符的正则表达式(Regex)。这也将帮助您处理诸如“é”之类的字符。

因此,对于字符串,~=指定基于Soundex()的匹配?