我只想创建一个未过滤的 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似乎在搜索没有空格的单词 test和word。它似乎没有使用选项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.
发布于 2019-02-12 15:25:21
我认为,也许你是期待所有的选项是可解决的,未经过滤。情况并非如此。某些选项以及选项和索引设置的组合如果不进行筛选,就无法解析。通常,可以从索引中解析对空格敏感的查询的唯一情况是,查询是一个“精确”的值查询。通常,空白(和标点符号)没有索引。这就是计划给你看的。由于索引中没有这些信息,未经过滤的查询将无法在此基础上排除结果。具有实际数据的过滤器可以根据空白排除结果并返回正确的结果。
https://stackoverflow.com/questions/54645986
复制相似问题