2017-06-19 19 views
2

我有一個列表,超過一萬個id需要檢索XML數據(如果匹配)。什麼是解決這個問題的最佳解決方案。我認爲我的代碼不是通過$ listKeyID循環的正確方法。請幫忙。提前致謝。Marklogic - 如果您知道id,則循環遍歷10000個文檔的最佳方法是什麼

let $listKeyID := ("accid01","accid02",......"accid100000") (: a huge list :) 
let $uris := cts:uris((), 
        (), 
        cts:and-query((       
          cts:collection-query("/collection/TRIS"), 
          cts:or-query((
          cts:field-word-query("key",($listKeyID)) 
          )) 
        )) 
       ) 
      ) 
return fn:count($uris) 

回答

0

實際上,這種方法沒有太大的錯誤。 cts:field-word-query接受序列作爲第二個參數,並將返回該序列中任何匹配的正數。我們也將其稱爲獵槍OR查詢,而且效率很高。

雖然您並不需要額外的cts:or-query,但您可能希望使用cts:field-value-query代替中間句符號,而不是中間句符號,該代碼與整個鍵值相匹配,具體取決於您的用例。

let $listKeyIDs := (accid01,accid02,......accid100000) (: a huge list :) 
let $uris := cts:uris(
    (), 
    (), 
    cts:and-query((
     cts:collection-query("/collection/TRIS"), 
     cts:field-value-query("key", $listKeyIDs) 
    )) 
) 
return fn:count($uris) 

HTH!

+0

Marklogic能否讀取包含所有ID的文本文件,然後遍歷文本文件中的每個ID。謝謝 – thichxai

+0

您可以使用http://docs.marklogic.com/xdmp:filesystem-file,但請記住必須位於MarkLogic服務器可以看到的路徑中。 – rjrudin

+0

請記住,在這裏調用cts:uris對於示例代碼是可以的,但實際上您會想要在不在URI上的節點上運行,例如運行cts:search並處理結果節點。 – hunterhacker

相關問題