0

Solr クラスターに多数のドキュメントが保存されており、特定のクエリで大量 (約 2,000 万) のドキュメントを取得したいと考えています。行のバッチ(たとえば、10000)を読み取り、パラメーターを使用して次のバッチに移動する標準的なアプローチを使用しstartます。しかし、約1 400 000のドキュメントの後、私は取得し始めていますOutOfMemoryError。これは、クライアントにドキュメントを送信する前に Solr がドキュメントをソートする方法によるものだと思います。私の知る限り、優先度キューを使用して上位 N 個の結果のみを取得するため、すべてのドキュメントのヘッダーをメモリにロードする必要はありません。ただし、たとえば 1,000,000 から 1,010,000 までの結果を返すように要求すると、以前の 1,000,000 ドキュメントすべてのヘッダーもロードする必要があります。

これを回避し、ソートせずにクエリを満たすすべての結果を取得する方法を探しています。それを行う方法はありますか?そうでない場合、Solr から多数の結果を取得する適切な方法は何ですか?

4

1 に答える 1

3

あなたの仮定は正しいです。1,000,000 から 1,010,000 までの結果を検索すると、Solr はサイズ 1,010,000 のプライオリティ キューをインスタンス化します。

これは、結果の完全なリストではなく、結果の上位 k リストを返すように設計された Solr の自然な使用例ではありません。

q=yourquery&fq=ID:[1 TO 1000]&rows=1000主キー ( 、 、 ...)の範囲でフィルタリングすることでこれを回避できますq=yourquery&fq=ID:[1001 TO 2000]&rows=1000が、これは醜いハックです。:-)

なぜすべての結果を取得する必要があるのですか? たとえば、ファセットや統計を計算する必要がある場合、Solr にはそれを効率的に実行できる 2 つのコンポーネントがあります。

于 2012-06-18T15:43:06.607 に答える