約 4,000 万のドキュメントを含むシングルコア [1] の非複製 Solr インデックスがあります。各ドキュメントには 2 つのフィールドがあり、1 つは保存され、もう 1 つは保存されません。保存されていないフィールドを検索すると、保存されたフィールドが結果になります。
このインデックスからの応答時間は約 8 秒です。注意すべきことは、私が一般的なフルテキスト クエリと見なすものを作成していないということです。各クエリには、多数の OR 条件が含まれています。これは遅いと思っていましたが、それほど遅くはありませんでした。
私が気付いたのは、JVM が利用できる 7 GB のうち、Solr が数百 MB しか使用していないことです。インデックスの多くをメモリに保持することはできません。これは私の質問につながります:RAMにインデックスの大部分(または少なくともそれ以上)を強制的に維持するようにsolrを構成する方法はありますか?
[1] シャーディングによって問題が発生します。私の Solr のアプリケーションでは、相対スコアが非常に重要です。シャード ローカル スコアリングとは、シャードが多いほど、スコアの精度が低くなることを意味します。
コメントに対する詳細情報:
私が検索するフィールドのフィールドタイプの定義は次のとおりです。
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
クエリの例を次に示します。
(Carberry J 2008 Toward a Unified Theory of High-Energy Metaphysics Silly String Theory Journal of Psychoceramics 5 11 1 3)
これは応答するのに約 10 秒かかりますが、(Carberry 2008) のように OR された用語が少ないクエリは、約 100 ミリ秒で返されます。