Web サイト データベースのインデックス作成に apache solr 検索エンジンを使用しています。
私はdjango + http://haystacksearch.org/を使用しています
たとえば、"Chicken" という単語を含むドキュメントがあるとします。
「chicken」を検索すると、solr はこのドキュメントを見つけることができます
しかし、「ひよこ」を検索しても何も見つかりません..
これを修正する方法はありますか?
Web サイト データベースのインデックス作成に apache solr 検索エンジンを使用しています。
私はdjango + http://haystacksearch.org/を使用しています
たとえば、"Chicken" という単語を含むドキュメントがあるとします。
「chicken」を検索すると、solr はこのドキュメントを見つけることができます
しかし、「ひよこ」を検索しても何も見つかりません..
これを修正する方法はありますか?
注: 次の解決策は、Solr 1.4 (およびそれ以降)固有のものです。
柔軟性を高めるために、NGramTokenizerFactoryを使用してデータのインデックスを作成し、完全な前後のワイルドカード検索を行うことをお勧めします。文字列の先頭または末尾の部分文字列を検索するだけの場合は、EdgeNGramTokenizerFactoryの使用を検討してください。
これは、必要に応じてテキスト フィールド タイプを置き換えるドロップインです。
<fieldType name="text" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
chickで始まるすべての単語を検索する場合は、chick*を検索します。
使った時
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
ブライアンの回答からワイルドカード検索を行うと、Solr のインデックス作成時間が劇的に増加しました。20回以上で!ここで見つけたワイルドカード検索の問題の他の決定:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
フィルターを追加するだけです
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
(デフォルトのトークナイザー - FieldType のインデックス ブロック内の solr.WhitespaceTokenizerFactory)。私にとっては、結果は同じで、システム コストは少なくなりました。
小さな単語セットで問題がある場合は、別のアプローチとして solr.SynonymFilterFactory を使用します。
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
シノニムを含む単純なテキスト ファイルを維持するだけです。
chick peep chicken
dawg hound dog
moggie puss kitten cat
複数形は、他のフィルターで自分自身を処理する必要があります。
構成を変更していません。searchString の前後にスターを使用しているだけです: *chicke * (最後に空白を入れないでください -> 最初と最後に * を使用すると、単語がイタリック体として書式設定されるためです)