如何在弹性搜索中建议(自动完成)下一个单词?

use*_*521 17 elasticsearch

假设我有以下字符串索引:

"My awesome pizza"
"My awesome beer"
"Heineken is awesome beer"
"I love pizza pepperoni"
"Where is my beer"
Run Code Online (Sandbox Code Playgroud)

对于输入"My"我想建议:

  1. 真棒
  2. 我的啤酒

对于输入"awesome"我想建议:

  1. 真棒比萨饼
  2. 很棒的啤酒

等等

所以我想在用户输入后提供下一个单词...还应该支持一些模糊(aEwsome).

我应该使用哪些建议/分析器?我尝试了术语完成,但它不是我想要的(例如,只有在搜索短语的开头时才能完成 - 如果我传递的是索引字符串中间的单词,那么它就不会建议它)

cma*_*tas 14

如果有人碰到这里,那么边缘n-gram方法(如@Siddardha Budige所述)现在已被完成建议者所取代.

它们是专门为自动建议而构建的,因此它们具有快速高效的特点.一个非常翔实的帖子ES团队可以在这里找到.

两个警告:

  1. 它们由内存中的数据结构实现,因此不适用于无法容纳在内存中的大型数据集.

  2. 结果的排名不是基于相似性(结果是否匹配),因此您必须小心混合模糊和非模糊匹配.

编辑:我们在这里使用完成建议器分享了我们自己的经验.

它包括一些关于非英语输入的模糊性和信息的实际例子.


Sid*_*ige 6

Elasticsearch提供了一种使用其完成建议功能快速启动并运行自动完成功能的便捷方法.

检查此链接,这是您正在寻找的

https://qbox.io/blog/multi-field-partial-word-autocomplete-in-elasticsearch-using-ngrams

Completion Suggester还可以帮助您实现此功能