5

フィルターとトークナイザーの両方を使用する独自のアナライザーを構築したいと考えています。

つまり、同じフィールドがキーワード(単一のトークンとしてのストリーム全体) と小文字です。

KeywordAnalyzerのみを使用する場合、field の値は大文字と小文字を区別しません。LowerCaseTokenizerまたはLowerCaseFilterを使用する場合、それらをKeywordAnalyzerと同じことを行う他のアナライザーと組み合わせる必要があります(文字なし、スペースで区切り、ストップワードを削除するなど)。

問題は、そのフィールドをキーワード (単一のトークンとしてストリーム全体) として作成し、フィルターまたはアナライザー Lucene またはトークナイザーを使用して小文字にする方法はありますか?

(Google翻訳、エラーについては申し訳ありません)

4

2 に答える 2

7

これはうまくいくはずです:

public final class YourAnalyzer extends ReusableAnalyzerBase { 

  @Override
  protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
    final TokenStream source = new KeywordTokenizer(reader);
    return new TokenStreamComponents(source, new LowercaseFilter(Version.LUCENE_36, source));
  }
}
于 2012-08-03T08:58:39.423 に答える
2

Lucene 3.6.2 では、次のようになります。

import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.KeywordTokenizer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.LowerCaseTokenizer;
import org.apache.lucene.analysis.ReusableAnalyzerBase;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.util.Version;

public class YourAnalyzer extends ReusableAnalyzerBase {

    private final Version version;

    public YourAnalyzer(final Version version) {
        super();
        this.version = version;
    }

    @Override
    protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
        final Tokenizer source = new KeywordTokenizer(reader);
        return new TokenStreamComponents(source, new LowerCaseFilter(this.version, source));
    }

}
于 2014-06-13T08:41:54.000 に答える