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

时间:2014-07-15 20:16:21

标签: elasticsearch

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

"My awesome pizza"
"My awesome beer"
"Heineken is awesome beer"
"I love pizza pepperoni"
"Where is my beer"

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

  1. awesome
  2. 我的啤酒
  3. 对于输入"awesome"我想建议:

    1. 非常棒的披萨
    2. 棒极了啤酒
    3. 所以我想在用户输入后提供下一个单词...还应该支持一些模糊( aEwsome )。

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

2 个答案:

答案 0 :(得分:13)

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

它们是专门为自动建议而构建的,因此它们具有快速高效的特点。 一篇内容丰富的文章可以找到ES团队here

两个警告:

  1. 它们由内存中的数据结构实现,因此不适合不适合内存的大型数据集。

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

  3. 编辑:我们分享了使用完成建议者here的经验。

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

答案 1 :(得分:5)

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

点击此链接,这就是您要找的内容

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

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