lucene - ElasticSearch 词干提取

标签 lucene tokenize elasticsearch analyzer stemming

我正在使用 ElasticSerach,我想为英语设置基本的词干提取。所以基本上,fighter 返回 fight 或任何包含 fight 词根的单词。

我有点困惑如何实现它。我通读了分析器、分词器和过滤器,发现有多种词干提取算法可用于 ElasticSearch。我只是不确定使用哪种组合——雪球、词干分析器、波特词干或同义词过滤器。

此外,映射的示例会非常有帮助。

最佳答案

请注意difference between stemming and lemmatisation .词干提取算法应用一系列规则(和/或字典查找,例如 KStem 的情况)并且不保证结果将是正确的语言“根”(即引理)。

因此,例如“marinate”和“marines”这两个词都会被 Porter 词干分析器转换为“marin”,这被认为是非常“激进”的词干分析器——它往往会为大量单词生成相同的词干。还有更保守的,例如 S-Stemmer,它只将复数形式转换为单数形式 (org.apache.lucene.analysis.en.EnglishMinimalStemFilter)。

研究论文中发现的词干提取方法比较似乎支持 KStem,因为它对英语文本最有效,但词干提取器的选择在很大程度上取决于文档的词汇量。您的目标不是优化词干分析器的性能,而是优化搜索引擎的性能,因此在实践中将其与系统的其他元素(尤其是查询扩展)分开衡量并不是一个好主意。

最好的解决方案是尝试 elasticsearch 中可用的多种不同的词干提取器(可以看到示例映射 here )并观察结果的精确度和召回率。如果您没有查询测试套件,那么最好的办法是执行“典型”查询并注意“奇怪”结果(词干分析器的影响过于激进)或“好”结果被忽略(过于保守)词干分析器)。

关于lucene - ElasticSearch 词干提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435494/

相关文章:

lucene - Solr 常见关键字/短语

lucene - 查询时字段被忽略

python - 使用 "nltk.word_tokenize()"函数时出错

elasticsearch - 更改Elasticsearch映射

lucene - 让我的 couchapp 可搜索的最聪明的方法是什么?

solr - Apache Solr 能否处理 TB 大数据

java - lucene:使 StandardTokenizer 适应 Twitter 数据

search - ElasticSearch中 token 过滤器的控制顺序

elasticsearch - 有什么方法可以改善ElasticSearch上的索引编制?

ubuntu - 在一个 Ubuntu 服务器上将多个 elasticsearch 节点作为服务运行