数据聚合
什么是聚合?
•聚合是对文档数据的统计、分析、计算
聚合的分类
聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:
l桶(Bucket)聚合:用来对文档做分组
•TermAggregation:按照文档字段值分组
•Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
l度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
•Avg:求平均值
•Max:求最大值
•Min:求最小值
•Stats:同时求max、min、avg、sum等
l管道(pipeline)聚合:其它聚合的结果为基础做聚合
参与聚合的字段类型必须是:
•keyword
•数值
•日期
•布尔
Bucket聚合
aggs代表聚合默认情况下,Bucket聚合是对索引库的所有文档做聚合,与query同级,此时query的作用是?
•限定聚合的的文档范围
聚合必须的三要素:
•聚合名称
•聚合类型
•聚合字段
聚合可配置属性有:
•size:指定聚合结果数量
•order:指定聚合结果排序方式
•field:指定聚合字段
Metrics聚合
RestAPI实现聚合
//请求获取,还是SearchRequest类型的对象
//请求组装如图所示
//然后发送请求
//最后解析响应
如何使用拼音分词器?
①下载pinyin分词器或从资料里上穿
②解压并放到elasticsearch的plugin目录
③重启即可
docker volume ls
docker volume inspect es-plugins
cd /var/lib/docker/volumes/es-plugins/
上传文件夹
docker restart es
如何自定义分词器?
①创建索引库时,在settings中配置,可以包含三部分
②character filter
③tokenizer
④filter
拼音分词器注意事项?
•为了避免搜索到同音字,搜索时不要使用拼音分词器
自动补全
completion suggester查询
elasticsearch提供了CompletionSuggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:
•参与补全查询的字段必须是completion类型。
•字段的内容一般是用来补全的多个词条形成的数组。

数据同步
elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步。
方式一:同步调用
•优点:实现简单,粗暴
•缺点:业务耦合度高
方式二:异步通知
•优点:低耦合,实现难度一般
•缺点:依赖mq的可靠性
方式三:监听binlog
•优点:完全解除服务间耦合
•缺点:开启binlog增加数据库负担、实现复杂度高
利用MQ实现mysql与elasticsearch数据同步
利用课前资料提供的hotel-admin项目作为酒店管理的微服务。当酒店数据发生增、删、改时,要求对elasticsearch中数据也要完成相同操作。
步骤:
•导入课前资料提供的hotel-admin项目,启动并测试酒店数据的CRUD
•声明exchange、queue、RoutingKey
•在hotel-admin中的增、删、改业务中完成消息发送
•在hotel-demo中完成消息监听,并更新elasticsearch中数据
•启动并测试数据同步功能
Long类型数据 精度丢失问题添加注解
hotel-admin
elasticsearch集群
ES集群结构
单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。
•海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点
•单点故障问题:将分片数据在不同节点备份(replica )
ES集群的节点角色
master eligible节点的作用是什么?
•参与集群选主
•主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求
data节点的作用是什么?
•数据的CRUD
coordinator节点的作用是什么?
•路由请求到其它节点
•合并查询到的结果,返回给用户
分布式新增如何确定分片?
•coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片
分布式查询的两个阶段
•分散阶段: coordinating node将查询请求分发给不同分片
•收集阶段:将查询结果汇总到coordinating node ,整理并返回给用户
故障转移:
•master宕机后,EligibleMaster选举为新的主节点。
•master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。
