【发布时间】:2013-09-17 14:49:37
【问题描述】:
我正在使用 Lucene 4.4,我有一个项目要做。在该项目中,必须删除所有非字母,并且必须将所有大写字母转换为小写字母。 我知道有一个分析器可以去除非字母。
但是 Lucene 中是否有一个分析器可以同时删除所有非字母并将所有大写字母转换为小写字母?
干杯。
【问题讨论】:
标签: java lucene indexing information-retrieval analyzer
我正在使用 Lucene 4.4,我有一个项目要做。在该项目中,必须删除所有非字母,并且必须将所有大写字母转换为小写字母。 我知道有一个分析器可以去除非字母。
但是 Lucene 中是否有一个分析器可以同时删除所有非字母并将所有大写字母转换为小写字母?
干杯。
【问题讨论】:
标签: java lucene indexing information-retrieval analyzer
实际上,是的,有一个分析器可以做到这一点。 SimpleAnalyzer。
以下内容(几乎)完全相同:
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);
TokenStream filter = new LowercaseFilter(Version.LUCENE_44, source);
return new TokenStreamComponents(source, filter);
}
};
当您对分析器有非常具体的要求时,您通常需要通过链接 Tokenizer 和一些类似这样的过滤器来设计自己的,如 Analyzer documentation 所示
LetterTokenizer 将标记定义为相邻字母的最大字符串,LowercaseFilter 执行它在锡上所说的操作。
这是一种相当常见的组合,因此还有LowercaseTokenizer,它可以一步完成LowercaseFilter 和LetterTokenizer 的工作,从而提供性能优势。 LowercaseTokenizer 是SimpleAnalyzer 实际使用的内容
【讨论】:
SimpleAnalyzer实际上并没有链接LetterTokenizer和LowercaseFilter,而只是使用了LowercaseTokenizer,它的性能要好一些。