Java 如何在Lucene Analyzer(Lucene 4.4)上使用多个过滤器

Java 如何在Lucene Analyzer(Lucene 4.4)上使用多个过滤器,java,filter,lucene,analyzer,Java,Filter,Lucene,Analyzer,我试图在自定义分析器中的令牌流上应用多个过滤器。代码如下: 公共类CustomizeAnAnalyzer扩展分析器{ //代码省略 @凌驾 受保护的TokenStreamComponents createComponents(字符串字段名、读卡器){ 标记器源=新的字母标记器(Version.LUCENE_44,reader); 令牌流过滤器=新的小写过滤器(Version.LUCENE_44,source); 过滤器=新的停止过滤器(Version.LUCENE_44,过滤器,停止字); 返回

我试图在自定义分析器中的令牌流上应用多个过滤器。代码如下:

公共类CustomizeAnAnalyzer扩展分析器{
//代码省略
@凌驾
受保护的TokenStreamComponents createComponents(字符串字段名、读卡器){
标记器源=新的字母标记器(Version.LUCENE_44,reader);
令牌流过滤器=新的小写过滤器(Version.LUCENE_44,source);
过滤器=新的停止过滤器(Version.LUCENE_44,过滤器,停止字);
返回新的TokenStreamComponents(源、新PorterStemFilter(源));
}                                              
}
但是,不会使用小写筛选器。我严格按照文档进行操作。 有人能告诉我怎么做吗


非常感谢,

您的问题在最后一行。您创建了一个过滤器链,然后在return语句中通过传回
new PorterStemFilter(source)
将其短路,这是一个直接位于标记器上的stem过滤器,而不是链中较早的过滤器。这应该是:

@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);
} 

这是个好机会。我真不敢相信我犯了那个错误:(我想我现在需要休息一下。非常感谢你,菲多尔贡。