xquery - 3 个查询总和不等于数据库中总文档数的精确值?
问题描述
我有3个场景-
xyz
获取具有元素名称和的所有文档的总文档数abc
。在这种情况下,我还需要元素名称的值。例如,文档的文档计数,其中元素名称xyz
值是lala
,元素名称abc
值是lili
等等,对于所有可能的值/xyz
和的组合abc
。这两个元素都应该存在于文档中。xyz
获取具有元素名称且元素abc
在该文档中不存在的所有文档的总文档数。在这种情况下,我需要所有可能的xyz
值明智的文档的文档计数。获取不包含 element 的文档的总文档数
xyz
。这三个加起来应该等于数据库的总文档数。
注意:数据库很大。查询必须很快。我可以在精度上稍微妥协。我需要避免通配符搜索。帮助。xdmp:estimate(cts:search(fn:doc(), cts:and-query(( cts:element-query(xs:QName("meta:xyz"), cts:true-query()),cts:element-query(xs:QName("meta:abc"), cts:true-query()) )) ) )
.
这将返回不同的结果,然后当我总结从获得的所有可能值cts:value-tuples
并将 1 通过 1 传递给 -
let $x := local:get-doc-count-for-localname-source(cts:value-tuples((
cts:element-reference(xs:QName("meta:xyz")),
cts:element-reference(xs:QName("meta:abc"))
)) )
let $y := fn:sum(($x))
return xdmp:estimate(cts:search(fn:doc(), cts:and-query((
cts:element-query(xs:QName("meta:xyz"), cts:true-query()),
cts:element-query(xs:QName("meta:abc"), cts:true-query())
)) )
)
解决方案
一般来说,通用索引可以通过将查询传递给cts.estimate()
服务器端 JavaScript 或xdmp.estimate()
XQuery 来产生快速估计。
包含 FIRST_ELEMENT 和 SECOND_ELEMENT 的文档的估计值:
cts.estimate(
cts.andQuery([
cts.elementQuery('FIRST_ELEMENT', cts.trueQuery()),
cts.elementQuery('SECOND_ELEMENT', cts.trueQuery())
]))
包含 FIRST_ELEMENT 但不包含 SECOND_ELEMENT 的文档的估计值:
cts.estimate(
cts.andQuery([
cts.elementQuery('FIRST_ELEMENT', cts.trueQuery()),
cts.notQuery(
cts.elementQuery('SECOND_ELEMENT', cts.trueQuery())
)
]))
不包含 FIRST_ELEMENT 的文档的估计值:
cts.estimate(
cts.notQuery(
cts.elementQuery('FIRST_ELEMENT', cts.trueQuery())
)
)
对数据库中所有文档的估计:
cts.estimate(
cts.trueQuery()
)
希望有帮助,
推荐阅读
- node.js - AWS Lambda NodeJS 连接到 RDS Postgres 数据库
- c - 将文件中的字符串存储到动态分配的数组中
- c# - 数字计数器
- java - Android应用,引用son.toString()时的空对象引用
- certificate - 如何在 Google Play 控制台中编辑/更改 SHA1 证书?
- javascript - 取一个字符串并反转某些单词——Javascript
- laravel - 将 TCPDF 附加到 Laravel 中的邮件
- android - 片段 Onclick 监听器
- firebase - Flutter Firestore 排序问题
- macos - 显示通知时需要得到输出