22

Web サイト データベースのインデックス作成に apache solr 検索エンジンを使用しています。

私はdjango + http://haystacksearch.org/を使用しています

たとえば、"Chicken" という単語を含むドキュメントがあるとします。

「chicken」を検索すると、solr はこのドキュメントを見つけることができます

しかし、「ひよこ」を検索しても何も見つかりません..

これを修正する方法はありますか?

4

5 に答える 5

18

注: 次の解決策は、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>
于 2009-12-29T18:18:32.980 に答える
7

chickで始まるすべての単語を検索する場合は、chick*を検索します。

于 2009-12-29T15:15:19.840 に答える
4

使った時

<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)。私にとっては、結果は同じで、システム コストは少なくなりました。

于 2011-01-25T09:48:48.927 に答える
1

小さな単語セットで問題がある場合は、別のアプローチとして solr.SynonymFilterFactory を使用します。

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

シノニムを含む単純なテキスト ファイルを維持するだけです。

chick peep chicken
dawg hound dog
moggie puss kitten cat

複数形は、他のフィルターで自分自身を処理する必要があります。

于 2010-01-30T10:05:22.277 に答える
0

構成を変更していません。searchString の前後にスターを使用しているだけです: *chicke * (最後に空白を入れないでください -> 最初と最後に * を使用すると、単語がイタリック体として書式設定されるためです)

于 2013-12-23T13:14:07.423 に答える