2012-04-18 77 views
3

我的marklogic服務器中有大約53,00,000個文檔,每個文檔都包含一條記錄。Markligic Cts中超出的時間限制:搜索

xquery version "1.0-ml"; 
    declare namespace pa = "http://www.contata.com/pa"; 
    let $query := 
     cts:or-query(( 
      cts:element-word-query( 
       xs:QName("pa:name"), "SMITH" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-1"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-2"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-3"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:city"), "" 
      ) 
        )) return 

cts:search(fn:doc(),$query)[5100000 to 5300000] 

當我執行上述查詢它需要長的時間來執行,並提供了以下錯誤

[1.0毫升] XDMP-EXTIME:CTS:搜索(FN:DOC(),CTS: (cts:element-word-query(xs:QName(「pa:name」),「SMITH」,(「lang = en」),1),cts:element-word-query(xs:QName (「pa:address-1」),「」,(「lang = en」),1),cts:element-word-query(xs:QName(「pa:address-2」),「」, lang = en「),1),...))) - 超出時間限制

但是當我執行cts:search(fn:doc(),$query)[1000 to 2000]它會成功執行。

還有一個問題,如果我已經加載了所有文檔,那麼在從RecordLoader Utility加載後如何在它們上創建索引。

回答

1

您在展示200.000個搜索結果。儘量少顯示一次。如果你使用查詢控制檯或CQ分析器,你會發現不是cts:search花費了很多時間,而是獲得了那些200k的文檔。

HTH!

+0

感謝您的回覆, 當我運行這個查詢時,它也給出了同樣的錯誤,但現在我試圖只得到10條記錄。搜索(fn:doc(),$ query)[5300000至5300010]' – 2012-04-18 08:20:32

4

看看「未過濾」選項,並考慮使用「搜索:搜索」。

你也可以增加時間限制,但可能不會想要。通過篩選搜索獲得第500000個結果,需要檢查500000個文檔,這可能需要多達500000個磁盤讀取。如果你的磁盤每秒可以管理100個,那就是5000秒。