假设我存储了一组字符串(Lucene 中的每个文档都是一个单词),然后给定一个输入单词 W,我想检索不仅匹配单词 W 的所有文档,还检索那些词干版本也匹配的文档W。
另外,假设输入一个单词 W,我想处理存在与单词 W 的词干版本匹配的文档的情况。
编写我自己的自定义分析器并返回一个 PorterStemFilter 就足够了吗?我是否需要编写此类并将其作为代码中的分析器引用?
假设我存储了一组字符串(Lucene 中的每个文档都是一个单词),然后给定一个输入单词 W,我想检索不仅匹配单词 W 的所有文档,还检索那些词干版本也匹配的文档W。
另外,假设输入一个单词 W,我想处理存在与单词 W 的词干版本匹配的文档的情况。
编写我自己的自定义分析器并返回一个 PorterStemFilter 就足够了吗?我是否需要编写此类并将其作为代码中的分析器引用?
编写一个在分析器链中具有词干分析器的自定义分析器就足够了。
这是在 Lucene 4.1中使用PorterStemFilter的示例代码
class MyAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new LowerCaseTokenizer(version, reader);
return new TokenStreamComponents(source, new PorterStemFilter(source));
}
}
请注意,您必须在查询时使用相同的自定义分析器,该分析器也用于索引。
您可以在相应的 PorterStemFilter 文档中找到您的 Lucene 版本的示例代码。