我想建立自己的分析仪同时使用过滤器/断词。
我的意思是,相同的字段是关键字 (整个流作为一个单一令牌)和小写
如果KeywordAnalyzer只使用,字段的值保持不区分大小写。 如果我使用LowerCaseTokenizer或LowerCaseFilter我必须把它们与做同样的事情其他分析仪结合KeywordAnalyzer (由无字母分开,用空格,删除停止的话,等等)
现在的问题是 :有没有什么办法,使这一领域作为关键字(整个流作为一个单一的令牌)和使用过滤器或分析仪的Lucene或断词是小写 ?
(谷歌翻译,比较遗憾的错误)
这应该工作:
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));
}
}
在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));
}
}