2

私のSolr実装では、発音区別符号を使用して検索するかどうかに関係なく、発音区別符号を含む単語と発音区別符号を含まない単語をクエリで返すようにします。

例を挙げると

検索語は「çest 」-Solrは「cest 」、「çest」、「çestca を返します検索語は「cest 」 -Solrは「 cest」、「çest」 、「 çestca」を返します

現在、最初の作品。「çest」を検索すると、cestとçestの両方が返されます。ただし、「cest」を検索すると、「cest」のみが返されます。

これが私のスキーマでどのように見えるかです:

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\W+" replacement="-"/>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>
</fieldType>

両方の方法で機能させる方法はありますか?

4

2 に答える 2

1

どちらかの一致が必要な場合は、は必要ありませんsolr.PatternReplaceCharFilterFactory。これにより、特殊文字がASCIIフィルターに渡される前に削除されます。

あなたが使用することができます:-

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
    </analyzer>
</fieldType>

WhiteSpace Tokenizerを使用してトークンを作成し、小文字をフィルターとして使用することもできます。

また、アナライザーでの実行の順序は、使用している順序に関係なく、次のとおりであることを忘れないでください:-

  • CharFilters
  • トークナイザー
  • フィルタ
于 2013-01-12T13:29:50.883 に答える
0

推奨される答えは私にはうまくいきませんでした、代わりに私はこれを使わなければなりませんでした:

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
    </analyzer>
</fieldType>    

solrバージョンで提供されているマッピングファイルを使用するか、 https://github.com/lmjabreu/solr-conftemplate/blob/master/mapping-ISOLatin1Accent.txtの下にリンクされているファイルを使用することもできます。

于 2017-02-20T18:52:52.420 に答える