【问题标题】:How to suggest (autocomplete) next word in elastic search?如何在弹性搜索中建议(自动完成)下一个单词?
【发布时间】:2020-05-21 20:16:26
【问题描述】:

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

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

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

  1. 我的真棒
  2. 我的啤酒

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

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

等等

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

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    以防万一有人碰到这里,edge-n-gram 方法(如@Siddardha Budige 所述)现在被completion suggesters 取代。

    它们是专门为自动完成而构建的,因此它们是快速高效的。 可以找到 ES 团队的一篇内容丰富的帖子 here

    两个警告:

    1. 它们由内存中的数据结构(称为Finite State Transducer)实现,因此不适用于无法装入内存的大型数据集。

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

    编辑:我们分享了自己使用 Completion Suggesters here 的经验。

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

    【讨论】:

      【解决方案2】:

      Elasticsearch 通过其完成建议功能提供了一种方便的方式来快速启动和运行自动完成功能。

      检查此链接,这就是您要查找的内容

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2021-06-04
        • 1970-01-01
        • 2012-08-19
        相关资源
        最近更新 更多