3

私の marklogic サーバーには約 53,00,000 のドキュメントがあり、各ドキュメントには 1 つのレコードが含まれています。

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-ml] XDMP-EXTIME: cts:search(fn:doc(), cts:or-query((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]と正常に実行されます。

もう 1 つ質問があります。すべてのドキュメントをロードした場合、RecordLoader ユーティリティからロードした後にドキュメントにインデックスを作成するにはどうすればよいですか。

4

2 に答える 2

4

「unfiltered」オプションを調べ、「search:search」の使用も検討してください。

制限時間を増やすこともできますが、おそらくしたくないでしょう。フィルタリングされた検索で 500000 番目の結果に到達するには、500000 のドキュメントをチェックする必要があり、最大 500000 のディスク読み取りが必要になる場合があります。ディスクが毎秒 100 を管理できる場合、それは 5000 秒です。

于 2012-04-18T15:23:38.150 に答える
1

200.000 件の検索結果を表示しています。一度に表示する数を減らすようにしてください。クエリ コンソールまたは CQ プロファイラーを使用すると、cts:search ではなく、20 万のドキュメントを取得するのにそれほど時間がかかっていないことがわかります。

チッ!

于 2012-04-18T07:50:07.190 に答える