Elasticsearch聚合、自动补全 | 黑马旅游

这篇具有很好参考价值的文章主要介绍了Elasticsearch聚合、自动补全 | 黑马旅游。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、数据聚合

1、聚合的分类

聚合(aggregations)可以实现对文档数据的统计、分析、运算。

聚合常见有三类:

  • 桶聚合 Bucket:对文档数据分组,并统计每组数量
    • TermAggregation:按照文档字段值分组(有点像mysql的group by)
    • Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月一组
  • 度量聚合 Metric:对文档数据做计算,例如最大值,最小值,平均值等
    • avg:求平均值
    • max:求最大值
    • min:求最小值
    • stats:同时求max、min、avg、sum等
  • 管道聚合 Pipeline:基于其他聚合结果再做聚合

参与聚合的字段类型必须是不可分词的:

  • keyword
  • 数值
  • 日期
  • 布尔

2、DSL实现Bucket聚合

现在要统计所有数据中的酒店品牌有几种,可以根据酒店品牌的名称做聚合

aggs代表聚合,与query同级,用aggs的时候query的作用是做返回,在query范围下聚合

聚合必须要的三要素是:聚合名称,聚合类型,聚合字段

可以配置的属性:

  • size:限制聚合结果的数量
  • order:指定聚合结果排序方式
  • field:指定聚合字段

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

3、DSL实现Metrics聚合

Elasticsearch聚合、自动补全 | 黑马旅游

用了mertrics的stats,最大、最小、平均都求,然后再上面order指定根据平均值排序

4、RestAPI实现聚合

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

5、案例

实现对品牌、城市、星级的聚合

需求:搜索页面的品牌、城市等信息不应该是在页面写死,而是通过聚合索引库中的酒店数据得来

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

要用map来接收,map的key就是城市或者星级这些,value就是对应的聚合list

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

这样就可以完成基本的功能了,但会有个问题:

Elasticsearch聚合、自动补全 | 黑马旅游

像这样,如果用户带着条件来查询的话,比如带着虹桥来查询,我们给用户筛选条件聚合还是根据全局索引聚合的,会先很多别的城市,这些城市没有虹桥如果点击就出问题了。所以我们要想办法改成对用户的输入条件聚合

其实就是在聚合条件上加查询条件,限制聚合的范围。

Elasticsearch聚合、自动补全 | 黑马旅游

 二、自动补全

1、拼音分词器

要实现根据字母做补全,就必须对文档按照拼音分词。

直接去下载拼音分词器的插件,然后analyzer选pinyin就行

Elasticsearch聚合、自动补全 | 黑马旅游

2、自定义分词器

拼音分词器的问题:分的次都是单个的没有什么用,ru、jia这种没用的,还有就是全部第一个小写,而且我们大多数情况还是用汉字进行分词,而不是拼音,我们要保留汉字分词

这个时候就必须要自定义分词器

要自定义分词器,必须先了解分词器的组成

  • character filters:在tokenizer之前对文本进行处理,例如删除字符、替换字符
  • tokenizer:将文本按照一定的规则切割成词条(tern),例如keyword就是不分词
  • tokenizer filter:将tokenizer输出的词条做进一步处理,例如大小写转化,同义词处理,拼音处理

Elasticsearch聚合、自动补全 | 黑马旅游

所以,我们知道pinyin分词器不会进行分词,那么我们就可以先用ik分词器先分词,再用pinyin分词器做处理,就可以得到pinyin的分词了

但是拼音分词器会对每个字的首字母结合的还有会去中文,这两个我们要优化

Elasticsearch聚合、自动补全 | 黑马旅游

 我们在创建索引的时候,可以用自定义分词器,但是在搜索的时候,就不能使用这个分词器了

Elasticsearch聚合、自动补全 | 黑马旅游 Elasticsearch聚合、自动补全 | 黑马旅游

3、completion suggester查询

es提供了completion suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对文档中字段的类型有一些约束:

参与补全查询的字段必须是completion类型(专门做自动补全查询的类型)

字段的内容一般是用来补全的多个词条形成的数组(右图,如果我们输入的s,那么可以补全这两个数据,但如果我们输入w,没有等多个词条的话就不会补全,所以分多个词条更人性化)

前面是品牌,后面是产品的名称,一个产品的都存在一个数组里

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

4、案例实战

实现hotel索引库的自动补全、拼音搜索功能

思路:

  1. 修改hotel索引库结构,设置自定义拼音分词器
  2. 修改索引库的name、all字段,使用自定义分词器
  3. 索引库添加一个新字段suggestion,类型为completion类型,使用自定义的分词器
  4. 给HotelDoc类添加suggestion字段,内容包含brand、business
  5. 重新导入数据到hotel库

首先,我们先修改索引库的数据结构,要多加一个completion_analyzer分词器,这个分词器是keyword,代表不分词,因为我们参与自动补全的都是一个个的词条,这些词条已经是最小了不需要再分词了,然后再用拼音分词器变成拼音就好了

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

all的创建索引库用的是自定义的拼音结合的分词器,搜索的分词器就用ik

Elasticsearch聚合、自动补全 | 黑马旅游

因为这个suggestion是多个类型的词条组成的数组,所以用list,然后品牌和商圈都可以做自动补全的内容。把想要做自动动补全的都可以加进去。但是这个商圈,business可能有多个是用/分割开的,所以我们要进一步进行拆分

Elasticsearch聚合、自动补全 | 黑马旅游

然后加入,现在就可以搜索一下试试了

Elasticsearch聚合、自动补全 | 黑马旅游

然后我们就要用java的客户端来操作了 

Elasticsearch聚合、自动补全 | 黑马旅游

Elasticsearch聚合、自动补全 | 黑马旅游

这样就能实现自动补全功能了 文章来源地址https://www.toymoban.com/news/detail-429339.html

到了这里,关于Elasticsearch聚合、自动补全 | 黑马旅游的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch[四]-数据聚合排序查询、搜索框自动补全、数据同步、集群

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的 sql 要方便的多,而且查询速度非常快,可以实现近

    2024年01月19日
    浏览(58)
  • SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

    聚合 (aggregations)可以实现对文档数据的统计、分析、运算。 聚合常见的有三类: 桶(Bucket)聚合 :用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合 :用以计算一些值,比如:最大

    2024年02月09日
    浏览(42)
  • elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近

    2024年02月08日
    浏览(51)
  • 微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 Sentinel

    聚合(aggregations)可以让我们极其 方便的实现对数据的统计、分析、运算 。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些 统计功能的比数据库的sql要方便的多,而且查询速度非常快 ,可以实现近

    2024年02月11日
    浏览(51)
  • 微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 微服务保护 Sentinel

    聚合(aggregations)可以让我们极其 方便的实现对数据的统计、分析、运算 。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些 统计功能的比数据库的sql要方便的多,而且查询速度非常快 ,可以实现近

    2024年02月15日
    浏览(56)
  • 【ElasticSearch】深入探索 ElasticSearch 对数据的聚合、查询自动补全、与数据库间的同步问题以及使用 RabbitMQ 实现与数据库间的同步

    在本文中,我们将深入探讨 ElasticSearch 在数据处理中的关键功能,包括数据聚合、查询自动补全以及与数据库的同步问题。 首先,我们将聚焦于 ElasticSearch 强大的聚合功能,解释什么是聚合以及如何通过 DSL 语句和 RestClient 实现各种聚合操作。这一功能能够让我们更深入地了

    2024年02月08日
    浏览(57)
  • SpringCloud学习路线(12)——分布式搜索ElasticSeach数据聚合、自动补全、数据同步

    一、数据聚合 聚合(aggregations): 实现对文档数据的统计、分析、运算。 (一)聚合的常见种类 桶(Bucket)聚合: 用来做文档分组。 TermAggregation: 按照文档字段值分组 Date Histogram: 按照日期阶梯分组,例如一周一组,一月一组 度量(Metric)聚合: 用以计算一些值,比如

    2024年02月15日
    浏览(44)
  • 【Elasticsearch】黑马旅游案例

    目录 4.黑马旅游案例 4.1.酒店搜索和分页 4.1.1.需求分析 4.1.2.定义实体类 4.1.3.定义controller 4.1.4.实现搜索业务 4.2.酒店结果过滤 4.2.1.需求分析 4.2.2.修改实体类 4.2.3.修改搜索业务 4.3.我周边的酒店 4.3.1.需求分析 4.3.2.修改实体类 4.3.3.距离排序API 4.3.4.添加距离排序 4.3.5.排序距离显

    2024年02月16日
    浏览(38)
  • 【Elasticsearch】学习笔记-黑马旅游网实践

    在 HotelService 的 search 方法中,只有一个地方需要修改: requet.source().query( ... ) 其中的查询条件。 在之前的业务中,只有 match 查询,根据搜索,现在要添加条件过滤,包括: 品牌过滤:是 keyword 类型,用 term 查询 星级过滤:是 keyword 类型,用 term 查询 价格过滤:是数

    2024年04月16日
    浏览(51)
  • 黑马旅游案例(包括搜索,分页,广告置顶)中使用 elasticsearch 7.17.9 Java API

    引言 学习黑马 SpringCloud 的 es 部分时发现老师用的是es的高级客户端来操作es的,而高级客户端已经显示弃用,上网搜索发现关于新的 Java client API 只有基础的索引、文档操作,没有关于这种稍复杂案例的操作,于是自己琢磨整理了一份笔记,也为其他学习最新的 es 的小伙伴

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包