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数
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值