以下查询给出了错误的结果计数:
<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以获得正确的结果。
感谢。
答案 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
)作为用于该约束的范围索引。