在分析器中使用 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
不再工作。
请问我做错了什么