java - 如何在 Lucene 分析器上使用多个过滤器 (Lucene 4.4)

标签 java filter lucene analyzer

我正在尝试在我的自定义分析器中对 TokenStream 应用多个过滤器。代码如下:

public class CustomizeAnalyzer extends Analyzer {
//code omitted

@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);              
    TokenStream filter = new LowerCaseFilter(Version.LUCENE_44, source);                
    filter = new StopFilter(Version.LUCENE_44, filter, stopWords);                  
    return new TokenStreamComponents(source, new PorterStemFilter(source));
}                                              
}

但是,不会使用 LowerCaseFilter。我确实遵循文档here 。 有人可以解释一下如何让它发挥作用吗?

非常感谢,

最佳答案

你的问题在最后一行。您创建一个过滤器链,然后通过回传 new PorterStemFilter(source) 在 return 语句中将其短路,这是一个直接位于分词器上的词干过滤器,而不是前面的过滤器链。这应该是:

@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);              
    TokenStream filter = new LowerCaseFilter(Version.LUCENE_44, source);                
    filter = new StopFilter(Version.LUCENE_44, filter, stopWords);                  
    filter = new PorterStemFilter(filter);
    return new TokenStreamComponents(source, filter);
} 

关于java - 如何在 Lucene 分析器上使用多个过滤器 (Lucene 4.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259314/

相关文章:

function - Haskell 映射和过滤器

node.js - 使用 Mongoose 使用 arrayFilters 查找

search - 如何在 Lucene 中执行通配符搜索

Java 循环在运行时中断

java - 如何在 PHP 中复制 Java 加密?

Java:如何发布此 XML 请求?

flutter - FutureBuilder 不断更新

php - 在 Elasticsearch 中使用 *(星号)作为术语查询

parsing - 什么是 solr 的默认查询解析器

java - 如何将PrimeFaces的 "Wizard"和 "PanelGrid"方向改为RTL