2012-04-17 11 views
3

vsクエリーのインデックス作成に別のアナライザーを使用する理由は何ですか?たとえば、schema.xmlファイルの例では、text_en_splittingの場合、索引アナライザはシノニム拡張を実行しませんが、問合せはシノニム拡張を行います。インデックスをできるだけ小さく保つだけですか?同様に、WordDelimiterFilterFactoryの場合、インデックスアナライザにはcatenateWords = "1"とcatenateNumbers = "1"があり、クエリアナライザには0が設定されています。これらの最適化は、「ほとんど同一」な2つのアナライザのメンテナンスの悪夢に値するでしょうか?Solrでは、なぜインデックス対クエリに異なるアナライザーを使用するのですか?

ありがとうございます!

答えて

7

インデックス時間とクエリ時間にシノニム拡張は必要ありません。これらの2つのうちの1つのみです。 索引作成中にのみ行うと、リストされたすべての単語がすべての同義語で補完されます。
これらの単語のいずれかを使用してインデックスをクエリすると、展開されたすべてのドキュメントに一致します。

両端を拡張する必要はありません。 インデックス時間に実行することをお勧めします。クエリ時間を短縮する方法です。

IMHOでは、一般的なルールは、ユーザーエクスペリエンスをはるかに向上させるために可能な限り(クエリ時に同義語を拡張してから数ミリ秒を含む)チップにすることです。そして、これらのチップは実質的に積み重なります。

ドキュメントでデータの冗長性を奨励する理由について、同じ質問をすることができます。

+1

実際には、 "i-pod、i pod => ipod"のようなシノニムファイルに明示的なマッピングがあると、それより複雑になることがあります。次に、クエリとインデックスの両方の時間に展開を行う必要があります。 –