アナライザーで MappingCharFilter を使用してワイルドカードの一致を壊す
この単純な StripSpacesAndSeparatorsAnalyzer を作成しました
public class StripSpacesAndSeparatorsAnalyzer extends Analyzer {
protected NormalizeCharMap charConvertMap;
protected void setCharConvertMap() {
NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
builder.add(" ","");
builder.add("-","");
builder.add("_","");
builder.add(":","");
charConvertMap = builder.build();
}
public StripSpacesAndSeparatorsAnalyzer() {
setCharConvertMap();
}
@Override
protected TokenStreamComponents createComponents(String fieldName,
Reader reader) {
Tokenizer source = new KeywordTokenizer(reader);
TokenStream filter = new LowercaseFilter(source);
return new TokenStreamComponents(source, filter);
}
@Override
protected Reader initReader(String fieldName,
Reader reader)
{
return new MappingCharFilter(charConvertMap, reader);
}
}
フィールド内のハイフンなどの特定の文字を無視して、検索できるようにします
catno:WRATHCD25
catno:WRATHCD-25
同じ結果が得られ、それは機能します (インデックスに追加されたフィールドの元の値は WRATHCD-25 でした)
ただし、ワイルドカード検索には問題があります
catno:WRATHCD25*
動作しますが、
catno:WRATHCD-25*
ではない
アナライザーを修正して initReader() メソッドをコメントアウトすると、
catno:WRATHCD-25*
今は動作しますが、もちろん
catno:WRATHCD25
動作しなくなりました。
私が間違っていることをしてください