私のsolr 4.1.0のインストールでは、音声エンコーディングで何も見つかりません。schema.xml からの抜粋:
<field name="textsuggest" type="text_suggest" indexed="true" stored="true" omitNorms="true" multiValued="true" />
<field name="textphon" type="text_phonetic_do" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="false" multiValued="true" />
<copyField source="textsuggest" dest="textphon"/>
...
<fieldType name="text_phonetic_do" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.GermanNormalizationFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms_de.txt"
ignoreCase="true" expand="false" />
<filter class="solr.PhoneticFilterFactory" encoder="ColognePhonetic" inject="false" />
</analyzer>
</fieldType>
text_suggest
は多かれ少なかれ元のテキストを小文字化し、solr.StandardTokenizerFactory
とでトークン化したものsolr.WordDelimiterFilterFactory
です。フォネティック エンコーダーは、ドイツ語の単語に特化したものです。同義語フィルターは、一部のドメイン固有の単語を処理します。http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/に触発されました。
「Geprüfter Betriebswirt」のエントリと、textsuggest のその他の項目のインデックスを作成します。「Betriebswirt」を検索すると、期待どおりの結果が得られます。ただし、元のドイツ語の小さなスペルミスである「Betribswirt」を検索すると、solr は 0 件のヒットを報告します。
solr の管理 GUI の分析ビューで、「Betriebswirt」とフィールド タイプの異なるスペルを試してみtext_phonetic_do
ましたが、それらはすべて同じ数値ストリームにエンコードされます。
- betriebswirt => 12718372
- betribswirt => 12718372
- betribswiirt => 12718372
- ペトリブスウィート => 12718372
したがって、エンコーディング (分析時間と検索時間) は期待どおりに機能します。しかし、上で述べたように、solr は音異表記を検索してもドキュメントを見つけられません。
クエリ ビューを使用していますが、クエリでさえtextphon:Betriebswirt
1 つの結果が返されません。クエリの完全な結果 (タイミングの部分を削除しました) は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="debugQuery">true</str>
<str name="indent">true</str>
<str name="q">textphon:Betriebswirt</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="0" start="0">
</result>
<lst name="debug">
<str name="rawquerystring">textphon:Betriebswirt</str>
<str name="querystring">textphon:Betriebswirt</str>
<str name="parsedquery">textphon:12718372</str>
<str name="parsedquery_toString">textphon:12718372</str>
<lst name="explain"/>
<str name="QParser">LuceneQParser</str>
</lst>
</response>
なぜ何も見つからないのかわかりません。デバッグ出力を正しく理解している場合、インデックスは正しい(読み取り:音声的にエンコードされた)トークンを検索することさえできます。
それで、私は何が欠けていますか?誰かが私を正しい方向に向けることができますか? ありがとう