【问题标题】:MarkLogic unfiltered diacritic search is not working as expectedMarkLogic 未过滤的变音符号搜索未按预期工作
【发布时间】:2017-11-17 08:19:52
【问题描述】:

我正在使用 ML 8。

unfiltered cts:search 无法正常工作 diacritic cts:query

找到下面的例子。

我在 ML DB 中插入了下面的 xml,带有 uri /diacritic/a.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:query 正在向我返回上述文档,但它不应该返回,因为存在 diacritic-sensitive 选项。

对于filtered 搜索它工作正常。

注意:fast diacritic sensitive searches 设置为 true

请帮忙。

【问题讨论】:

  • 请同时发布您为数据库设置的排序规则。您的查询假定默认值是在数据库本身上设置或使用 MarkLogic 的默认排序规则。了解这一点将有助于人们形成适当的答案。
  • 我不确定在哪里可以设置数据库的排序规则。 fn:default-collation 已回复我 http://marklogic.com/collation/ 请让我知道这是否正确,或者您需要更多详细信息。
  • 我认为您需要查看此部分以了解排序规则以及它如何影响搜索分辨率:docs.marklogic.com/guide/search-dev/encodings_collations 我不会将此作为答案发布,因为它可能不是问题。但我认为你需要一些背景知识来调查和报告上述情况。

标签: marklogic marklogic-8


【解决方案1】:

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

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

在这种情况下 diacritic-insensitive-key(oily) = diacritic-sensitive-ke(oily) = diacritic-insensitive-key(öily) != diacritic-sensitive-key(öily)。

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2017-05-12
    • 2018-10-17
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多