Lucene 从复合词中获取单个词

Lucene4 get a single word from compund word

我正在寻找一种从复合词中获取单词的方法,即。我索引“汽车”,我需要搜索“汽车”。我可以通过用通配符包装搜索字符串来做到这一点,但我需要知道它是否可以使用默认配置。

我试过 ShingleFilter,但似乎效果不佳。 这是我试过的自定义分析器

public class CustomAnalyzer : Analyzer
{
    private LuceneVersion _version;

    public CustomAnalyzer(LuceneVersion luceneVersion)
    {
        _version = luceneVersion;
    }

    protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader)
    {
        Tokenizer tokenizer = new KeywordTokenizer(reader);

        ShingleFilter filter = new ShingleFilter(tokenizer, 2);
        filter.SetTokenSeparator(string.Empty);            
        TokenStream tokenStream = filter;
        
        return new TokenStreamComponents(tokenizer, tokenStream);
    }
}

我找到了答案。它是关于在我的自定义分析器中使用 NGramTokenizer 的。这是需要它的向导的代码:

public class CustomAnalyzer : Analyzer
{
    private LuceneVersion _version;

    public CustomAnalyzer(LuceneVersion luceneVersion)
    {
        _version = luceneVersion;
    }

    protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader)
    {
        Tokenizer tokenizer = new NGramTokenizer(_version, reader);

        return new TokenStreamComponents(tokenizer);
    }
}