【问题标题】:cts search whitespace-sensitivects 搜索空格敏感
【发布时间】:2019-02-12 08:45:19
【问题描述】:

我只是想创建一个未过滤 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。

【问题讨论】:

    标签: marklogic


    【解决方案1】:

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

    【讨论】:

    • 这是有道理的。非常感谢您的回答!
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多