2012-03-15 1 views
1

私は、任意の多数の行を要求すると、1つの行のみの照会がクラッシュすることを発見しました。Solrが任意の行を照会するときにメモリーが不足する

サーバーによってスローされたエラーは500です - メモリ不足例外メッセージが表示されます。

このクラッシュ:

http://localhost:8983/solr/myIndex1/select?rows=100000&q=*%3A*&fq=group%3term1_JAYUNIT100&fq=grid%3A75&wt=json&indent=on 

これませんクラッシュ:

http://localhost:8983/solr/myIndex1/select?rows=1&q=*%3A*&fq=group%3term1_JAYUNIT100&fq=grid%3A75&wt=json&indent=on 

これは私には奇妙である - 私はSolrのは一つだけの行を返すクエリのために余分なメモリを使用する理由を知るいけません。 "行"パラメータの値に基づいてクエリが実行される前に、サーバー側で発生するリソースの事前割り当てのいくつかの並べ替えはありますか?

答えて

1

SOLRはクエリの結果をキャッシュします。この場合、結果セットはフィルタリングしても1行しか返さなくても非常に大きくなります。

まず、SOLRにはRAMが必要です。これは結局インRAMインデックスです。 SOLRを速くするすべてがRAMを占有しますので、SOLRサーバーを飢えさせないようにしてください。

第2に、実際のクエリは役に立たない。ビットマップ索引を構築し、データベースからすべてのレコードを選択し、特定のフィールド値を持つものだけを選択するために、そのセットをフィルタリングする」と言っても意味がありません、あなたのクエリは、自然言語でのこのような音場合:。

Records where XField is like so, AND YField is like that, AND ZField meets this condition

はその後SOLRでそれを行うための正しい方法は次のとおりです。実際には

q=XField:so&fq=Yfield:that%20AND%20ZField:this

、あなたはX XFieldを持つレコードがあることを確認している場合:YFieldで3回レコードそうと:とそれと.07xレコードがZField:これは、あなたのAND式を並べ替えることから始まり、ZField i n q=部分。

q=部分は結果セットを定義します。結果セット内のすべてのレコードを取得した後、SOLRはビットマップ索引手法を適用して、セット操作を使用して結果をすばやくフィルタリング(絞り込み)します。だから可能ならば、が動作するために、q=の一部のレコードを返すようにしてください。

関連する問題