cts搜索返回错误的通配搜索结果

时间:2017-09-05 10:43:40

标签: search marklogic

面对'wildcarded'搜索'未过滤'cts搜索查询的问题。

问题解释: 我在DB中插入了以下文档。

xdmp:document-insert('/a/a1.xml', <root><aa>123</aa></root>);
xdmp:document-insert('/a/a2.xml', <root><aa>12</aa></root>);
xdmp:document-insert('/a/a3.xml', <root><aa>1</aa></root>);

在下面的查询中,我正在查找“aa”元素中只有一位数的文档。

但是下面的查询返回了我上面插入的所有文件。

cts:search(
    doc(),
    cts:element-word-query(xs:QName('aa'), '?', ('wildcarded')),
    'unfiltered'
)

如果我将执行'过滤'搜索,我会得到正确的结果,即doc'/a/a3.xml。

同样的问题是当搜索词是'??'时(预期文档包含'aa'元素中的两位数字)和 '???'(预期文档中包含'aa'元素中的三位数字)

以下索引设置为true:

  • 三个字符搜索
  • 三个字位词
  • 快速元素字符搜索
  • 尾随通配符搜索
  • 尾随通配符字位
  • 快速元素尾随通配符搜索

我很想知道为什么会这样,我该如何纠正?

1 个答案:

答案 0 :(得分:1)

如果存在可以满足查询的索引,则未经过滤的搜索只能返回准确的结果。您可以使用xdmp:plan查看您的查询是如何制定索引解析的: xdmp:plan( cts:search(doc(),cts:element-word-query(xs:QName("aa"),"?","wildcarded"))

在您的情况下,您没有可以执行此操作的索引,并且计划将显示您只是要求包含该元素的所有文档。三个字符和尾随通配符索引仅在有三个或更多非通配符时才起作用,而快速元素字符索引只是意味着应用您对元素上下文的任何字符索引。我们建议您为通配符添加一个代码点排序规则词汇词典。您可以将它作为一个整体添加到数据库中,或者,如果您知道此特定元素只需要这些类型的通配符,则可以添加元素单词词典。然后可以使用词典扩展来解析通配符。

这会自动以启发式方式发生(也就是说,根据数据库的大小和词典匹配的数量,我们可能会以或多或少的准确方式制定查询),但也有各种选项可供选择。强迫处理以某种方式行事。请参阅cts:element-word-query

的API