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