ES自动补全可以通过两种方式实现:
- 使用
prefix
查询 - 要么使用(edge-)ngrams
- 或使用完成提示
第一种选择是穷人的修养功能。我提到它是因为它在某些情况下很有用,但是如果您有大量文档,则应避免使用它。
第二个选项使用常规的ES索引功能,即它将标记文本,所有(edge-)ngram都将被索引,然后您可以搜索已被索引的任何前缀/中缀/后缀。
第三个选项使用不同的方法,并针对速度进行了优化。基本上,在索引类型的字段时
completion,ES将创建一个“有限状态转换器”并将其存储在内存中以实现超快速访问。
就实现而言,有限状态传感器接近特里。您可以查看这篇出色的文章,该文章显示了特里与有限状态传感器的比较
更新(2019年6月25日):
ES
7.2引入了一种称为的新数据类型
search_as_you_type,该数据类型本身就允许这种行为。有关更多信息,请访问:https :
//www.elastic.co/guide/en/elasticsearch/reference/7.2/search-as-you-
type.html



