【问题标题】:Searching with Lucene with stemming enabled在启用词干提取的情况下使用 Lucene 进行搜索
【发布时间】:2013-03-06 18:25:54
【问题描述】:

假设我存储了一组字符串(Lucene 中的每个文档都是一个单词),然后给定一个输入单词 W,我想检索不仅匹配单词 W 的所有文档,还检索那些匹配词干的文档版本也匹配 W。

另外,假设输入一个单词 W,我想处理存在与单词 W 的词干版本匹配的文档的情况。

编写我自己的自定义分析器并返回一个 PorterStemFilter 就足够了吗?我需要编写这个类并在代码中将其作为分析器引用吗?

【问题讨论】:

    标签: search solr lucene full-text-search


    【解决方案1】:

    编写一个在分析器链中包含词干分析器的自定义分析器就足够了。

    这是在 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 版本的示例代码。

    【讨论】:

    • 谢谢。这有帮助。我在这里有一个疑问。如果两个词源于同一个词,那不会导致精度问题吗?
    • 是的,使用词干提取会以牺牲精度为代价来提高召回率。程序员/设计人员应根据问题领域的特定要求做出决定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多