我正在使用MarkLogic查询相对较大的xml数据集。现在我使用两组这样的查询:
xdmp:estimate(cts:search(fn:doc(),cts:and-query(($ query,$ text-query,$ sent-query))))
- 醇>
xdmp:estimate(cts:search(fn:doc(),cts:and-not-query(cts:and-query(($ query,$ text-query)),$ sent-query) ))
其中, $ 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-query
对cts:element-range-query
感到不舒服,尽管???
N.B。我正在使用xdmp:estimate
获得一些计数而没有任何错误。
范围索引是在“ score_id ”字段上创建的。
答案 0 :(得分:2)
尝试将unfiltered
选项添加到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