2012-04-18 11 views
3

私はmarklogicサーバーに約53,000,000のドキュメントがあり、各ドキュメントには1つのレコードが含まれています。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] 

Iが挙げクエリ上に実行すると、それがかかり、長時間実行すると、次のエラーを与える

[1.0ミリリットル] XDMP-EXTIME:CTS:検索(FN:DOC()、CTS: (xs:QName( "pa:name")、 "SMITH"、( "lang = en")、1)、cts:element-word-query(xs: ( "pa:address-2")、 ""、( "pa: - 制限時間を超えました

しかし、cts:search(fn:doc(),$query)[1000 to 2000]を実行すると、正常に実行されます。

1つの質問より、もし私がすべてのドキュメントを読み込んだら、RecordLoader Utilityから読み込んだ後、どのようにインデックスを作成すればいいですか?

答えて

1

あなたは200.000件の検索結果を表示しています。一度に少なく表示してみてください。クエリコンソールまたはCQプロファイラを使用する場合は、cts:searchでは時間がかかっていませんが、200kドキュメントを取得していることがわかります。

HTH!

+0

返信いただきありがとうございます。 このクエリを実行すると、同じエラーが発生しますが、今は10レコードしか取得しようとしていません。 'cts:search(fn:doc()、$ query)[5300000〜5300010]' –

4

「フィルタされていない」オプションを調べて、「検索:検索」を使用することも検討してください。

制限時間を長くすることもできますが、おそらく望めません。フィルタリングされた検索で500000回目の結果を得るには、500000件のドキュメントをチェックする必要があります。これには、500000回のディスク読み取りが必要になる場合があります。ディスクが毎秒100を管理できる場合、それは5000秒です。

関連する問題