Lucene不敏感的空白分析仪?

问题描述 投票:1回答:3

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

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

lucene lucene.net whitespace
3个回答

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

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


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#版本。

© www.soinside.com 2019 - 2024. All rights reserved.