Marklogic Xquery搜索:搜索术语 - 选项

时间:2013-05-30 18:36:08

标签: xquery marklogic

以下查询给出了错误的结果计数:

<options xmlns="http://marklogic.com/appservices/search">     
  <constraint name="Keyword">
    <range type="xs:string" 
           facet="true" 
           collation="http://marklogic.com/collation/">
      <element ns="" name="keyword"/>
      <facet-option>frequency-order</facet-option>
      <facet-option>descending</facet-option>
      <facet-option>limit=1</facet-option>
    </range>
  </constraint>
</options>;
let $query-text  := "pankaj!"
let $response := search:search($query-text, $query-options1)
return $response

没有字“pankaj!”在我的ML DB中,但它给出了33个响应。 33对于“pankaj”这个词是正确的,但对于“pankaj!”则不是。 “!”正在从查询文本中删除。

<search:response snippet-format="snippet" 
  total="33" 
  start="1" 
  page-length="10" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns="" 
  xmlns:search="http://marklogic.com/appservices/search"> 

请告诉我如何设置term-option以获得正确的结果。

感谢。

3 个答案:

答案 0 :(得分:4)

wst和mblakele都有用,但你的代码还有一个问题。您声明了一个facet,可用于进行现场搜索。但你没有使用它。您需要在搜索字词前添加“关键字:”。

如果不这样做,搜索字词将被视为单词查询,这将导致标点符号被删除,正如mblakele所解释的那样。如果您的搜索字词也出现在关键字元素之外,则使用前缀可以改善计数。为了得到你真正想要的东西,来自wst和Will的提示添加标点敏感也很有价值。

HTH!

答案 1 :(得分:3)

单词索引不是标点符号敏感的,因为单词不是标点符号。我建议您阅读http://developer.marklogic.com/try/ninja/page8以了解各种查询选项,并http://docs.marklogic.com/guide/search-dev/count_estimate了解索引查找。

自动添加标点符号使该术语符号标点敏感:http://docs.marklogic.com/cts:word-query解释了这一点。但搜索总数仍将显示标点符号不敏感的估计,因为索引是标点符号不敏感的。

答案 2 :(得分:1)

这将强制匹配感叹号(或任何标点符号):

<term>
  <term-option>punctuation-sensitive</term-option>
</term>

我还建议在配置中使用标点符号敏感的排序规则(http://marklogic.com/collation//S4)作为用于该约束的范围索引。