不受过滤的搜索不区分大小写,在MarkLogic中返回错误的结果

时间:2017-07-18 14:10:16

标签: xml marklogic

似乎存在与unfilteredcase-sensitive搜索相关的问题。

我正在使用element-value-query选项运行case-sensitive

unfiltered cts搜索返回错误的结果。

以下代码段显示错误的行为。

案例1:

xdmp:document-insert('/a.xml', <a><name>Dixit</name></a>);

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

输出:返回插入的xml

预期:不应该返回

我在索引中认为,密钥Dixit等于&#39; dixit&#39;因此返回XML。

所以我尝试了以下但没有收获。

案例2:

xdmp:document-insert('/a.xml', <a><name>Dixit singla</name></a>);

cts:search(
  doc('/a.xml'),
  cts:element-value-query(xs:QName('name'), 'dixit singla','case-sensitive'),
  'unfiltered'
);

输出:返回插入的xml

预期:不应该返回

它是MarkLogic中的错误还是预期的行为。 我很想知道原因。

注意: fast case sensitive searches&amp; fast diacritic sensitive searches两个索引都设置为true

1 个答案:

答案 0 :(得分:3)

这与上面提到的有些不同。

索引解析取决于通用索引中的键匹配。事实证明,“Dixit”的不区分大小写的键与“dixit”的区分大小写的键相同,因为计算不区分大小写的键的方式是计算单词的小写形式的键。因此,在我们比较键时,有一个键匹配区分大小写的“dixit”,因此索引返回匹配。索引解析可以准确地要求查询中的大写单词仅匹配文档中的大写单词,但查询中的小写单词不匹配文档中的小写单词。您需要进行过滤以获得准确的结果。