cts搜索对空格敏感的

时间:2019-02-12 08:45:19

标签: marklogic

我只想创建一个未经过滤的 whitespace-sensitive cts查询,但由于某种原因无法使其正常工作(没有其他限制)。

这是我的测试环境:

xquery version "1.0-ml";

xdmp:document-insert("test1.xml", <test><title>test word</title></test>);
xdmp:document-insert("test2.xml", <test><title>test-word</title></test>);


cts:search(//test, cts:element-value-query(xs:QName("title"), "test word", ("whitespace-sensitive")), ("unfiltered"))

我有两个文档,它们的区别仅在于一个字符-。执行此cts搜索将返回两个文档。看看执行计划,事情变得很奇怪。最终计划显示如下:

<qry:term-query weight="1">
 <qry:key>5029803220044614354</qry:key>
 <qry:annotation>element(title,value("test","word"))</qry:annotation>
</qry:term-query>

MarkLogic似乎在搜索两个单词 testword,而没有空格。它似乎没有使用选项whitespace-sensitive。仅当我再添加三个选项“区分大小写”,“变音符号敏感”和“标点符号敏感”时,它才进行实际的空格敏感搜索。删除任何选项都会导致对空格不敏感的搜索:

xdmp:plan(cts:search(//test, cts:element-value-query(xs:QName("title"), "test word", ("case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive")), ("unfiltered")))
=> ...
<qry:term-query weight="1">
 <qry:key>11298961959398038325</qry:key>
 <qry:annotation>element(title,value("test"," ","word"))</qry:annotation>
</qry:term-query>

我误解了“对空格敏感”选项吗?

使用MarkLogic 9.8-0。

1 个答案:

答案 0 :(得分:2)

我认为也许您期望所有选项都可以不过滤地解析。事实并非如此。如果不进行过滤,则无法解析某些选项以及选项和索引设置的组合。通常,只能从索引中解析对空格敏感的查询的唯一情况是查询是否为“精确”值查询。通常,空白(和标点符号)未编制索引。这就是该计划向您显示的内容。由于该信息在索引中不可用,因此未经过滤的查询将无法在此基础上排除结果。该过滤器还具有实际数据,可以根据空白排除结果并返回正确的结果。