1

私は、ASCIIFoldingFilter を使用するカスタム アナライザーを作成して、場所名の拡張ラテン語セットを通常のラテン語に減らしました。

public class LocationNameAnalyzer extends Analyzer    {

    @Override
    public TokenStream tokenStream(String arg0, Reader reader) {

        //TokenStream result = new WhitespaceTokenizer(Version.LUCENE_36, reader);
        StandardTokenizer tokenStream = new StandardTokenizer(Version.LUCENE_36, reader);

        TokenStream result = new StandardFilter(tokenStream);
        result = new LowerCaseFilter(result);

        result = new ASCIIFoldingFilter(result);


        return result;
    }

}

現在のように非推奨のものでいっぱいであることは知っていますが、後で修正します。現在の問題は、このアナライザーを適用すると、標準のラテン語を使用して結果を見つけることができますが、元の名前を検索するときは見つからないことです.

例: "Munchen" はミュンヘンに関連する結果をもたらしますが、"München" はもはやそうではありません。

私の場合、ASCIIFoldingFilter は単にストリーム内の文字をオーバーライドすると想定しているため、問題は 2 つのストリーム (通常のストリームと折りたたまれたラテン語のストリーム) を一緒に追加する方法です。

4

1 に答える 1

2

アナライザーとサーチャーの両方でフィルターを使用する必要があります。そうすれば、検索に使用されるトークンは、インデックスに格納されているトークンと同じになります。

于 2012-09-24T16:24:21.773 に答える