3

Solr 3.6 を使用してドキュメント コレクション (DBLP) のインデックスを作成します。一部の文書のメタデータはドイツ語です。ウムラウトとアクセントの処理には、ASCIIFoldingFilterFactory を使用します (schema.xml を参照)。

タイトル フィールドにUnterstützungを含むドキュメントがあるにもかかわらず、検索するとtitle:Unterstutzungいくつかの結果が返されますが、検索すると結果がありません。title:Unterstützung

管理 Web インターフェイスでアナライザーを使用すると、クエリ用語とドキュメント用語がインデックス化され、期待どおりに処理されることが示されます。しかし、クエリにウムラウトがあると、なぜ結果が得られないのでしょうか?

schema.xml の title フィールドの定義:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
                    <analyzer type="index">
                            <charFilter class="solr.HTMLStripCharFilterFactory"/>
                            <tokenizer class="solr.StandardTokenizerFactory"/>
                            <filter class="solr.ASCIIFoldingFilterFactory"/>
                            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" preserveOriginal="1"/>
                            <filter class="solr.LowerCaseFilterFactory"/>
                            <filter class="solr.EnglishPorterFilterFactory"/>
                            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
                    </analyzer>
                    <analyzer type="query">
                            <tokenizer class="solr.StandardTokenizerFactory"/>
                            <filter class="solr.ASCIIFoldingFilterFactory"/>
                            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/>
                            <filter class="solr.LowerCaseFilterFactory"/>
                            <filter class="solr.EnglishPorterFilterFactory"/>
                            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
                    </analyzer>
            </fieldType>

完全な schema.xml: http://pastebin.com/rQDw30nA

ドキュメントとクエリの両方でのUnterstützungのアナライザー出力: http://pastebin.com/6cxSnGwP (クエリでは、処理された用語unterstutzungが強調表示されます)

4

2 に答える 2

3

Tomcat の単純なエンコーディングの問題です。次の属性を server.xml に追加する必要があります。

<Server ...>
 <Service ...>
   <Connector ... URIEncoding="UTF-8"/>
     ...
   </Connector>
 </Service>
</Server>

http://wiki.apache.org/solr/SolrTomcat#URI_Charset_Config

于 2012-11-21T12:01:54.780 に答える
1

私は1年前にSolr1.4で同様の問題を抱えていましたが、それがあなたにも役立つかどうかはよくわかりませんが、マッピングフィルターを使用すると、ASCIIフォールディングに加えて、私のスキーマに関連する部分があります。

 <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.ASCIIFoldingFilterFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
         <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
 </analyzer>

'unicode' => 'Mapped char'マッピングファイルは、グーグルの言語に応じてたくさんの例を見つけることができるようなマピンを含む単なるテキストファイルです...

お役に立てば幸いです

于 2012-11-21T04:01:16.190 に答える