Solr / Luceneにスペースを無視させるにはどうすればよいですか?私が達成したいのは、検索エンジンを次のような検索フレーズに一致させることです。「香港」のみがインデックスに登録されている場合の「香港」。
私の知る限り、私はいくつかのテキストアナライザーで遊ぶべきです。このアプローチを説明する良い情報源は見つかりません。
ありがとう!
Solr / Luceneにスペースを無視させるにはどうすればよいですか?私が達成したいのは、検索エンジンを次のような検索フレーズに一致させることです。「香港」のみがインデックスに登録されている場合の「香港」。
私の知る限り、私はいくつかのテキストアナライザーで遊ぶべきです。このアプローチを説明する良い情報源は見つかりません。
ありがとう!
ShingleFilterFactoryを使用して、単語の組み合わせを作成できます。トークン間のスペースを削除するには、tokenSeparator=""を設定する必要があります。それでも個々の単語を検索する場合は、outputUnigrams=trueのままにしておくことをお勧めします。
<fieldType name="text_shingle" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2"
outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=""/>
</analyzer>
</fieldType>
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory
ただし、注意する必要があります。ShingleFilterは、ドキュメント内のすべての組み合わせを作成します。たとえば、「注意する必要がある」は「注意する必要がある」という結果になります。。この例は良さそうです。これを見てみましょう。「Aretheeatersalso」は、「arethetheatreseatersalso」を生成します。「劇場」を検索すると、誤検知が発生します。
人の名前などの短いドキュメントのインデックスを作成する場合は、組み合わせが常に人の名前で使用されるため、ShingleFilterをお勧めします。ただし、ドキュメントのインデックスを作成する場合は、何を組み合わせているかを知る必要があります。この場合、同義語フィルターの方が適している可能性があります。辞書から組み合わせを作成し、SynonymFilterFactoryで使用できます。
あなたの場合の検索基準は異なります。solr.SynonymFilterFactoryを使用して、この組み合わせをシノニムとして定義する
必要があります。
上記のリンクの例を確認してください。
これにより、香港と香港の両方を検索しても、結果を得ることができます。
通常、WordDelimiterFilterFactoryは、スペースのない組み合わせに使用されます。
大文字と小文字の変更や英数字の組み合わせなど、任意の組み合わせで検索する場合に使用されます。
たとえば
、Wi-fiはwifi、wifi、wifiなど
で検索可能である必要があります...iPhoneはiphone、iPhone、iphoneなどで検索可能である必要があります...
j2seはj2se、j2seなどで検索可能です...
これらのスペースがいつ関連するかを知っている必要があるので、単語のリストがあるので、シノミムを使用する必要があります... SynonymFilterFactoryのドキュメントを参照してください