2014-04-09 76 views
0

誰能告訴我,如果我可以通過擺脫fn:distinct-values($d2)表達式來改善此查詢?我可以調整此查詢以擺脫fn:distinct-values嗎?

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,

雨果

回答

0

我不是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)) 
+0

我的目標是提高速度,需要這個查詢作爲聚合函數的一部分,將大約500.000個文檔聚合到大約40.000個文檔。剖析我到目前爲止所看到的現在都處於同一個數量級,所以這一切都有待完成。我沒有檢查你的答案,但會接受它。 thx –

+0

我的意思是「更高層次的目標」,就像用戶故事。有一個大聚合問題,你應該看看http://docs.marklogic.com/cts:value-co-occurrences和'map'選項。這樣一個數據庫請求就會返回一個包含所有聚合數據的巨型地圖。可能這是一些C++的情況:http://docs.marklogic.com/cpp/udf/index.html – mblakele