【问题标题】:Can I tune this query to get rid of fn:distinct-values?我可以调整此查询以摆脱 fn:distinct-values 吗?
【发布时间】:2014-04-09 14:34:04
【问题描述】:

谁能告诉我是否可以通过去掉fn:distinct-values($d2) 表达式来改进这个查询?

xquery version "1.0-ml";
declare namespace zespc = "http://www.cendris.nl/postcode";
declare namespace op = "http://www.nvsp.nl/oplage-mapping";

let $wijk := '665402'
let $d1 := fn:distinct-values(fn:doc('/data/map/oplage-mapping.xml')//op:map[@wijk_id = $wijk]/@ppc6_id)

let $q1 := cts:element-attribute-range-query(
      xs:QName("op:map"), xs:QName("wijk_id"), "=",
      $wijk)

let $d2 := cts:search(//op:map,$q1)/@ppc6_id
let $d3 := fn:distinct-values($d2)

return (fn:count($d1), fn:count($d3))

谢谢,

雨果

【问题讨论】:

    标签: marklogic


    【解决方案1】:

    我不是 100% 确定您的目标是什么,但这应该会返回相同的结果。您将需要另一个属性范围索引,这次是 op:map/@ppc6_id

    注意排序规则,并在合适的情况下考虑使用数字类型。

    xquery version "1.0-ml";
    declare namespace zespc="http://www.cendris.nl/postcode";
    declare namespace op="http://www.nvsp.nl/oplage-mapping";
    
    let $wijk := '665402' (: Consider using integers instead of strings :)
    let $q-wijk := cts:element-attribute-range-query(
      xs:QName("op:map"), xs:QName("wijk_id"),
      '=', $wijk)
    let $ref-ppc := cts:element-attribute-reference(
        xs:QName('op:map'), xs:QName('ppc6_id'))
    let $values-doc := cts:values(
      $ref-ppc, (),
      cts:and-query(
        (cts:document-query('/data/map/oplage-mapping.xml'),
         $q-wijk)))
    let $values-all := cts:values($ref-ppc, (), $q-wijk)
    return (count($values-doc), count($values-all))
    

    【讨论】:

    • 我的目标是提高速度,需要将此查询作为聚合函数的一部分,将大约 500.000 个文档聚合到大约 40.000 个文档。分析我到目前为止所拥有的一切似乎现在都处于相同的数量级,所以这是要做的。我没有检查你的答案,但会接受。谢谢
    • 我的意思是更高层次的“目标”,类似于用户故事。对于一个大的聚合问题,您应该查看docs.marklogic.com/cts:value-co-occurrencesmap 选项。这样,一个数据库请求会返回一张包含所有聚合数据的巨型地图。可能这甚至是某些 C++ 的情况:docs.marklogic.com/cpp/udf/index.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2014-04-16
    • 2013-07-26
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多