3个查询总和不等于数据库中总doc数的精确度?

时间:2018-05-17 19:27:46

标签: xquery marklogic

我有3个场景 -

  1. 获取元素名称为xyzabc的所有文档的总文档数。在这种情况下,我还需要元素名称的值。例如,文档的doc计数,其中元素名称xyz值为lala,元素名称abc值为lili,依此类推,所有可能的值/组合{ {1}}和xyz。这两个元素都应该存在于doc。
  2. 获取该文档中不存在元素名称为abc且元素xyz的所有文档的总文档数。在这种情况下,我需要对abc值明智的所有可能值的文档计数。
  3. 获取不包含元素xyz的文档的总文档数。 这三个加起来应该等于数据库的总doc数 注意:数据库大小很大。查询必须快速。我可以稍微妥协一下精度。我需要避免使用通配符搜索。救命。

    xyz

  4. 当我总结从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()) )) ) )获得的所有可能值并将1乘1传递给 -

    时,返回不同的结果
    cts:value-tuples

1 个答案:

答案 0 :(得分:1)

通常,通用索引可以通过将查询传递到服务器端JavaScript中的cts.estimate()或XQuery中的xdmp.estimate()来产生快速估算。

包含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()
  )

希望有帮助,