MarkLogic未经过滤的变音搜索未按预期工作

时间:2017-11-17 08:19:52

标签: marklogic marklogic-8

我正在使用ML 8。

unfiltered cts:search无法正常使用diacritic cts:query

找到以下示例。

我已使用uri /diacritic/a.xml

在ML DB中插入了以下xml
<root>
    <name>öily</name>
</root>

cts:search查询我正在运行。

cts:search(
    doc('/diacritic/a.xml'),
    cts:element-value-query(xs:QName('name'), 'oily', ('diacritic-sensitive')),
    'unfiltered'
)

高于cts:查询返回上面的文档,但它不应该返回,因为diacritic-sensitive选项存在。

对于filtered搜索,它运行正常。

注意:fast diacritic sensitive searches设置为true

请帮忙。

1 个答案:

答案 0 :(得分:1)

排序与搜索无关(范围查询除外)。

这里的问题是索引的工作原理。密钥不知道它们是变音符号不敏感的密钥,它们只知道密钥中的字符是什么。为了计算单词的变音符号不敏感键,我们删除变音符号并从剩下的内容中形成一个键。要计算单词的变音符号敏感键,我们不会删除变音符号并从单词中形成一个完整的键。

在这种情况下,变音符号不敏感键(油性)=变音符号敏感键(油性)=变音符号不敏感键(öily)!=变音符号敏感键(öily)。

所以索引无法解决这里的差异。对öily的变音符号敏感搜索在索引中与油性不匹配,但反之则不然。

要在此处获得准确的结果,您需要进行过滤。

附录:为什么我们不将变音符号敏感度包含在键中?因为这会大大增加索引的大小(变音符号为x2,大小写为x2)。