Lucene不敏感的空白分析仪?

时间:2011-01-19 10:22:38

标签: lucene lucene.net whitespace

我正在使用lucene进行搜索并使用标签我使用空白分析器。看起来它存储得当。使用标准分析器,我的'C#'搜索将产生C,C ++的结果。我试过的每个分析器(我都没有尝试过)除了空白分析器之外做了这个。这很好,除非我搜索c#i没有结果(我使用小写C而不是大写)。如果我搜索诸如“Lucene不敏感的空白分析仪”之类的标题,这很烦人。当它碰巧是“Lucene Insensitive Whitespace analyzer?”时。 (注意前三个单词以upper开头,而最后一个单词与我的搜索相比,一个上面和下面都是。)

如何制作不敏感的空白分析仪?注意:WhitespaceAnalyzer是密封的。

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

您可以创建如下的自定义分析器(以Lucene版本4.10.4为例)

import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;

public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
    @Override
    protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
            Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
            TokenStream filter = new LowerCaseFilter(tokenizer);
            return new TokenStreamComponents(tokenizer, filter);
    }
}

您可以在编制索引时使用分析器配置索引编写器,并在搜索时使用它来创建查询解析器。

答案 2 :(得分:1)

class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        var tokenizer = new WhitespaceTokenizer(reader);
        var lowercaseFilter = new LowerCaseFilter(tokenizer);

        return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
    }
}

这是一个C#版本,非常适合我的用例。