1

下面的查询给了我错误的结果计数:

<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"> 

请让我知道如何设置术语选项以获得正确的结果。

谢谢。

4

3 回答 3

4

wst 和 mblakele 都有有用的注释,但是您的代码还有一个问题。您声明一个方面,您可以将其用于字段搜索。但是你没有使用它。您需要在搜索字词前添加“关键字:”。

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

于 2013-05-30T19:49:10.403 回答
3

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

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

于 2013-05-30T19:37:27.603 回答
1

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

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

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

于 2013-05-30T18:44:15.410 回答