查询返回误报

时间:2014-12-04 06:14:44

标签: marklogic

我使用以下查询来获取记录,但它正在获取误报结果。

<cts:and-query xmlns:cts="http://marklogic.com/cts">
    <cts:or-query>
      <cts:element-value-query>
        <cts:element>type</cts:element>
        <cts:text xml:lang="en">article</cts:text>
      </cts:element-value-query>
    </cts:or-query>
    <cts:element-query>
      <cts:element>body</cts:element>
      <cts:word-query>
        <cts:text xml:lang="en">ace???</cts:text>
        <cts:option>case-insensitive</cts:option>
        <cts:option>diacritic-insensitive</cts:option>
        <cts:option>punctuation-insensitive</cts:option>
        <cts:option>whitespace-insensitive</cts:option>
        <cts:option>stemmed</cts:option>
        <cts:option>wildcarded</cts:option>
      </cts:word-query>
    </cts:element-query>
    <cts:or-query>
      <cts:element-range-query operator="&gt;=">
        <cts:element>expires-on</cts:element>
        <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2014-12-04T06:05:29.78Z</cts:value>
      </cts:element-range-query>
      <cts:not-query>
    <cts:element-value-query>
      <cts:element>expires-on</cts:element>
      <cts:text xml:lang="en">*</cts:text>
      <cts:option>wildcarded</cts:option>
    </cts:element-value-query>
      </cts:not-query>
    </cts:or-query>
  </cts:and-query>
</results>

上述查询是一个通配符查询,应该从&#34; ace&#34;开始搜索6个字母的单词。但我们也得到的结​​果包含超过6个字母单词,从&#34; ace&#34;开始。

以下是我们正在使用的索引

  1. 字搜索
  2. 字位
  3. 快速短语搜索
  4. 快速区分大小写的搜索
  5. 快速变音敏感搜索
  6. 快速元素词搜索
  7. 元素词位置
  8. 快速元素短语搜索
  9. 三个字符搜索
  10. 快速元素字符搜索
  11. 尾随通配符搜索
  12. 快速元素尾随通配符搜索
  13. 此外,我们正在使用未经过滤的&#34;执行搜索时的选项。

    任何帮助将不胜感激。

    由于

1 个答案:

答案 0 :(得分:1)

您没有说出您的通配符索引设置是什么。这很重要:如果索引中没有包含正确的信息,结果就不符合您的期望。

查看https://docs.marklogic.com/guide/search-dev/wildcard以了解各种通配符索引的工作方式以及可能要启用的通配符索引。在这种情况下,我建议trailing-wildcard,或许与element-trailing-wildcard一起推荐。

使用某些优化策略也可以改进该查询。如果可能的话,我会element-value-query*一起避免。而是使用cts:element-query($qname, cts:and-query(()))。那做同样的工作,而且效率更高。

如果body是一个简单的元素,那么使用element-word-query而不是将element-queryword-query相结合会更有效率。如果body很复杂 - 也就是说,如果要匹配的文本是后代元素 - 那么您可以选择使用元素查询和启用尾随通配符位置索引,还是设置element word query through对于所有后代元素。