現象
こういうクエリを投げたら怒られた
q=*:*&fq=item_id:(12)&start=0&rows=40&sort=item_id desc&&q=item_id:(4 OR 6 OR 10 OR 17 OR ... OR 15000 )
原因
クエリーを作成するために結合できる節の最大数を超えてしまったとのこと。
対処方法
そもそも OR で大量に ID を並べているのおかしいので処理を見直す
これが一番正しい。
solrconfig.xml の maxBooleanClauses を上げる
そのままの通り、結合できる節の制限値を上げる。これはコア別に設定できないという制限があるので、すべてのコアに影響を与えてしまうことに要注意
ちなみにここの一番下のところにも書いてある
https://wiki.apache.org/solr/CoreAdmin
AND の場合は filter query にする
今回の場合、OR で繋ぎたいので、これはできないが、AND の場合は以下の一番下のサンプルのように一つ一つフィルタに分解することで対処することができる。
q=item_id:1 AND item_id:2 AND item_id:3 ... AND item_id:15000 // これはだめ
q=*:*&fq=item_id:(1 2 3 ... 10) // これもだめ
q=*:*&fq=item_id:1&fq=item_id:2& ... &fq=item_id:15000 // これはOK
巨大な boolean query を実行する必要がなくなるから制限値に引っかからないそうな。
詳細は以下の URL を参照。
http://solr.pl/en/2011/12/19/do-i-have-to-look-for-maxbooleanclauses-when-using-filters/