ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

11.Elasticsearch应用(十一)

2026/9/19 8:27:53 拓冰建站 浏览量
11.Elasticsearch应用(十一)

Elasticsearch应用(十一)

1.什么是自动补全

现代的搜索引擎,一般都会提供Suggest as you type的功能

帮助用户在输入搜索的过程中,进行自动补全或者纠错。通过协助用户输入更加精准的关键词,提高后续搜索阶段文档的匹配程度

在goole上搜索,一开始会自动补全。当输入到一定长度,如因为单词拼写错误无法补全,就会开始提示相似的词或句子

在这里插入图片描述

2.ES自动补全介绍

Elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回

原理:将输入的文本分解为Token,然后在索引的字典查找相似的term并返回

一个请求可以指定多个suggest

3.四种类别的Suggesters

  1. Term与Phrase Suggester
  2. Completer与Context Suggester

4.建议模式(Suggestion Mode)

  1. Missing: 如果搜索字符串在索引中已经存在,就不提供建议
  2. Popular: 推荐出现频率更加高的词
  3. Always: 无论是否存在,都提供建议

5.Suggestion核心

  1. 每个建议都包含了一个算分
  2. 相似性是通过Levenshtein Edit Distance的算法实现的
  3. 核心思想就是一个词改动多少字符可以和另一个词一致。
  4. 提供了很多可选参数来控制相似性的模糊程度。例如“max_edits”

6.Completer补全

缺点

只能匹配前缀进行补全

字段要求

  • 参与补全查询的字段必须是completion类型
  • 字段的内容一般是用来补全的多个词条形成的数组
  • 在Java中建议使用List<String>来对应补全类型,在构造方法中把部分字段内容添加到List中

在这里插入图片描述

补全查询语法

在这里插入图片描述

拼音补全注实战

自动补全字段可以通过自定义分词器来更好的使用,使用keyword是因为自动补全字段插入到ES的时候不需要分词,使用自定义拼音分词器是因为要完成基于拼音的补全

在这里插入图片描述
在这里插入图片描述

7.Term补全

请求格式

POST /<index>/_search
{"suggest":{"<suggest>":{"text":"搜索字符串","term":{"suggest_mode":"<suggest_mode>","field":"<field>","prefix_length":"前缀的匹配数,默认为1"}}}
}

请求参数

  1. prefix_length: 前缀的匹配数,默认为1

7.Phrase Suggester

介绍

  1. 在Term Suggester上增加了一些额外逻辑
  2. 例如参数:Max Errors,Confidence

请求格式

POST /articles/_search
{"suggest": {"my-suggestion": {"text": "lucne and elasticsear rock hello world ","phrase": {"field": "body","max_errors":2,"confidence":0,"direct_generator":[{"field":"body","suggest_mode":"always"}],"highlight": {"pre_tag": "<em>","post_tag": "</em>"}}}}
}

请求参数

  1. Max Errors: 最多可以拼错的Term数