Marklogic 我可以调整这个查询以去掉fn:distinct值吗?

Marklogic 我可以调整这个查询以去掉fn:distinct值吗?,marklogic,Marklogic,有人能告诉我是否可以通过去掉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:

有人能告诉我是否可以通过去掉
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))
Thx


雨果

我不能100%确定你的目标是什么,但这应该会得到同样的结果。您将需要另一个属性范围索引,这次是在
op:map/@ppc6\u 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个文档。到目前为止,我所做的分析似乎都在同一个数量级上,所以这就是我要做的。我没有核对你的答案,但会接受的。thxI的意思是更高层次的“目标”,有点像用户故事。对于一个大的聚合问题,您应该查看和
map
选项。这样,一个数据库请求将返回一个包含所有聚合数据的巨型映射。对于某些C++来说,这甚至可能是一种情况: