我正在使用 ElasticSerach,我想为英语设置基本词干。所以基本上,战斗机返回战斗或任何包含战斗词根的词。
我有点困惑如何实现这一点。我正在阅读分析器、标记器和过滤器,并且有多种词干算法可以在 ElasticSearch 中使用。我只是不确定要使用哪个组合 - 雪球、词干分析器、搬运工词干或同义词过滤器。
此外,映射的示例将非常有帮助。
我正在使用 ElasticSerach,我想为英语设置基本词干。所以基本上,战斗机返回战斗或任何包含战斗词根的词。
我有点困惑如何实现这一点。我正在阅读分析器、标记器和过滤器,并且有多种词干算法可以在 ElasticSearch 中使用。我只是不确定要使用哪个组合 - 雪球、词干分析器、搬运工词干或同义词过滤器。
此外,映射的示例将非常有帮助。
请注意词干提取和词形还原之间的区别。词干算法应用一系列规则(和/或字典查找,例如 KStem 的情况)并且不保证结果将是正确的语言“根”(即引理)。
例如,“marinate”和“marines”这两个词都会被 Porter 词干分析器转换为“marin”,这被认为是非常“激进”的词干——它往往会为大量词产生相同的词干。还有更保守的,例如 S-Stemmer,它只将复数形式转换为单数形式 ( org.apache.lucene.analysis.en.EnglishMinimalStemFilter
)。
研究论文中发现的词干提取方法的比较似乎倾向于将 KStem 作为对英语文本最有效的方法,但词干分析器的选择在很大程度上取决于文档的词汇量。您的目标不是优化词干分析器的性能,而是搜索引擎的性能,因此将其与系统的其他元素(尤其是查询扩展)分开测量在实践中并不是一个好主意。
最好的解决方案是尝试在 elasticsearch 中可用的许多不同的词干分析器(可以在此处查看示例映射)并观察结果的精度和召回率。如果您没有查询测试套件,那么您最好的选择是执行“典型”查询并注意“奇怪”结果(词干分析器过于激进)或“好”结果被忽略(过于保守)词干分析器)。