約250秒のSolrコアがありますTrieIntField
(として宣言されていますdynamicField
)。Solrインデックスには約1400万のドキュメントがあり、多くのドキュメントはこれらのフィールドの多くで何らかの価値があります。一定期間にわたって、これらの250のフィールドすべてを並べ替える必要があります。
私たちが直面している問題は、基礎となるLucenefieldCache
がすぐにいっぱいになることです。4 GBのボックスがあり、インデックスサイズは18GBです。これらの動的フィールドの40または45でソートした後、メモリ消費量は約90%になり、OutOfMemoryエラーが発生し始めます。
今のところ、消費されたメモリの合計が80%を超える場合、tomcatを再起動するcronジョブが毎分実行されます。
私が読んだことから、ソート可能なSolrフィールドの個別の値の数を制限すると、fieldCache
スペースが少なくなることを理解しています。これらのソート可能なフィールドの値は、0から33000までの任意の整数であり、非常に広く分散されています。いくつかのスケーリングソリューションを念頭に置いていますが、この問題全体を処理するための最良の方法は何ですか?
更新:ソートする代わりに、ブーストした場合、fieldCacheに移動しないと考えました。したがって、次のようなクエリを発行する代わりに
select?q=name:alba&sort=relevance_11 desc
やってみた
select?q={!boost relevance_11}name:alba
ただし、残念ながら、ブーストするとフィールドキャッシュにもデータが入力されます:(