如何获取Marklogic数据库中的文档总数?

时间:2012-05-18 14:24:16

标签: marklogic

我在Marklogic数据库中有大约20个lacs文档。我希望我的搜索应用程序中的文档总数用于分页。获取我正在使用的总数

xdmp:estimate(cts:search(doc(), $query))

其中$ query是cts:and-query中组合的各种查询的组合。但我没有得到正确的总数。当$ query为空时,它显示的计数远远高于数据库中的文档总数。当我使用

xdmp:estimate(doc())

它显示了正确的总数,但它是静态总数,不会根据查询而改变。我想根据响应特定查询返回的结果来计算总数,这就是为什么我将$ query作为参数传递但是它没有显示正确的总数。 fn:count()显示正确的总数,但当文档数量大约为20 lacs时,fn:count()不起作用,因为fn:count()xdmp:estimate()慢。

请帮助我根据用户输入的搜索字词获取正确的文件总数。

2 个答案:

答案 0 :(得分:10)

要了解这里发生了什么,请先阅读http://resources.marklogic.com/library/media/inside-marklogic

中的架构白皮书

现在试试这个测试用例:

xdmp:estimate(doc()),
xdmp:estimate(cts:search(doc(), ()))

第一个表达式将计算数据库中文档的数量。第二个表达式将计算数据库中文档片段的数量。因此,如果结果不同,您可能已经配置了片段根或片段父。一些特殊文档也会创建额外的片段:我认为拼写词典和同义词库文件可以做到这一点。

如果要将估算限制为XML文档根,请在可搜索表达式中指定文档根QName,如果不关心根元素名称,请使用/*

xdmp:estimate(cts:search(/*, ()))

您还可以使用cts:query参数指定仅出现在要计算的文档中的QName。

答案 1 :(得分:1)

我不明白你的问题。您想要数据库中的文档总数还是与搜索匹配的文档总数?

xdmp:estimate是正确的方法,但它只是 ESTIMATE 。如果可以从索引中完全解析估计中使用的查询,那么估计将是100%正确的。但是,如果无法从索引中完全解析查询(需要过滤),那么估计将会减少一些量。这是因为xdmp:estimate仅使用索引来计算。将fn:count(cts:search(doc(), $query))xdmp:estimate(cts:search(doc(), $query))进行比较。如果给定查询的结果明显不同,那么您需要启用其他索引来支持该查询,或者使用差异。

相关问题