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

case-insensitive with unfiltered search returning wrong results in MarkLogic

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

我是 运行 一个 element-value-querycase-sensitive 选项。

unfiltered cts 搜索 return 给我错误的结果。

以下代码片段表现出错误的行为。

案例 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'
);

输出: return给我插入的 xml

预期: 不应该return

这里我认为在索引中,键 Dixit 等于 'dixit' 因此 return 告诉我 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'
);

输出: return插入 xml

预期: 不应该return

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

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

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

索引解析取决于通用索引中的键匹配。事实证明 "Dixit" 的不区分大小写的键与 "dixit" 的区分大小写的键相同,因为计算不区分大小写的键的方式是计算单词的小写形式的键.因此在我们比较键的时候,有一个匹配区分大小写的键 "dixit" 所以索引 return 匹配。索引解析可以准确地要求查询中的大写词只匹配文档中的大写词,而不是查询中的小写词只匹配文档中的小写词。您需要过滤才能在此处获得准确的结果。