cts:MarkLogic中的search()返回一个空序列

时间:2012-08-21 11:05:59

标签: marklogic

我正在使用MarkLogic查询相对较大的xml数据集。现在我使用两组这样的查询:

  
      
  1. xdmp:estimate(cts:search(fn:doc(),cts:and-query(($ query,$ text-query,$ sent-query))))

  2.   
  3. xdmp:estimate(cts:search(fn:doc(),cts:and-not-query(cts:and-query(($ query,$ text-query)),$ sent-query) ))

  4.   

其中, $ text-query:= cts:word-query(“coke”)

$ sent-query:= cts:and-query((cts:element-range-query(xs:QName(“score_id”),“> =”,$ lowValue),               CTS:元素范围的查询(XS:QName的( “score_id”), “<”,$ hiValue)))

$ query:= cts:word-query(“减肥可乐”)

$ lowValue:= 13264683002210000000;

$ hiValue:= 13264683002211000000;

对于这两个集合(查询编号1和2),我得到一些计数,但当我删除xdmp:estimate部分时,cts:search() for < strong>查询1。返回xmls,其中查询号为。 2,我得到一个空序列。

我的问题是,如果cts:search没有返回任何xmls,那么xdmp:estimate如何计算查询号的节点。 2 ??

cts:and-not-querycts:element-range-query感到不舒服,尽管???

N.B。我正在使用xdmp:estimate获得一些计数而没有任何错误。       范围索引是在“ score_id ”字段上创建的。

3 个答案:

答案 0 :(得分:2)

尝试将unfiltered选项添加到cts:search来电。

http://docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/apidoc/SearchBuiltins.xml&category=SearchBuiltins&function=cts:search

有可能cts:search返回空,因为片段与索引匹配但被过滤掉为误报。未经过滤的结果应该可以帮助您确定这是否正确,或者可能是错误的证据。

答案 1 :(得分:2)

特别是,“估计”仅使用索引。如果您没有“快速短语”索引,则无法直接从索引中判断短语“减肥可乐”是否在文档中 - 它将使用查询的“索引解析”阶段中的索引来查找所有索引同时包含“饮食”和“可乐”的文件。稍后对于真实的查询,它将“过滤”这些候选文档,以查看这两个单词是否实际上是彼此相邻的。

请参阅MarkLogic搜索开发人员指南,特别注意“索引解析”和“过滤”。

答案 2 :(得分:1)

问题可能来自xdmp:estimate,因为它显示了可能有命中的碎片数量(也是假阳性),这不仅实际上有。

尝试使用fn:count代替xdmp:estimate,因为每次都会产生正确的结果,唯一的问题是它比xdmp:estimate

了解更多信息: MarkLogic Server: Search Developer's Guide Chapter 11