在分析仪使用MappingCharFilter打破通配符匹配在Lucene的4,1分析仪打破通配符为什么使用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*
不
out的initReader()方法然后
catno:WRATHCD-25*
现在的作品,但当然
catno:WRATHCD25
不再起作用的。
威猛我做错了,请
您是否将相同的分析器传递到['QueryParser' ctor](http://lucene.apache.org/core/4_1_0/queryparser/org/apache/lucene/queryparser/classic/QueryParser.html #QueryParser(org.apache.lucene.util.Version,%20java.lang.String,%20org.apache.lucene.analysis.Analyzer))? – femtoRgon 2013-03-25 16:53:08
是的,我通过了相同的分析器 – 2013-03-25 19:59:53