数据聚合
    什么是聚合?
    •聚合是对文档数据的统计、分析、计算

    聚合的分类
    聚合(aggregations可以实现对文档数据的统计、分析、运算。聚合常见的有三类:
    l桶(Bucket)聚合:用来对文档做分组
    •TermAggregation:按照文档字段值分组
    •Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
    l度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
    •Avg:求平均值
    •Max:求最大值
    •Min:求最小值
    •Stats:同时求max、min、avg、sum等
    l管道(pipeline)聚合:其它聚合的结果为基础做聚合

    参与聚合的字段类型必须是:
    •keyword
    •数值
    •日期
    •布尔

    Bucket聚合
    image.png
    aggs代表聚合默认情况下,Bucket聚合是对索引库的所有文档做聚合,与query同级,此时query的作用是?
    •限定聚合的的文档范围
    聚合必须的三要素:
    •聚合名称
    •聚合类型
    •聚合字段
    聚合可配置属性有:
    •size:指定聚合结果数量
    •order:指定聚合结果排序方式
    •field:指定聚合字段

    Metrics聚合
    image.png
    RestAPI实现聚合
    //请求获取,还是SearchRequest类型的对象
    //请求组装如图所示
    image.png
    //然后发送请求
    //最后解析响应
    image.png

    如何使用拼音分词器?
    ①下载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
    拼音分词器注意事项?
    •为了避免搜索到同音字,搜索时不要使用拼音分词器
    image.png
    自动补全
    completion suggester查询
    elasticsearch提供了CompletionSuggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:
    •参与补全查询的字段必须是completion类型。
    •字段的内容一般是用来补全的多个词条形成的数组。
    image.png
    image.png

    数据同步
    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中数据
    •启动并测试数据同步功能
    image.png

    Long类型数据 精度丢失问题添加注解
    hotel-admin
    image.png

    elasticsearch集群
    ES集群结构
    image.png
    单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。
    •海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点
    •单点故障问题:将分片数据在不同节点备份(replica )

    ES集群的节点角色
    image.png

    master eligible节点的作用是什么?
    •参与集群选主
    •主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求
    data节点的作用是什么?
    •数据的CRUD
    coordinator节点的作用是什么?
    •路由请求到其它节点
    •合并查询到的结果,返回给用户

    分布式新增如何确定分片?
    •coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片
    分布式查询的两个阶段
    •分散阶段: coordinating node将查询请求分发给不同分片
    •收集阶段:将查询结果汇总到coordinating node ,整理并返回给用户

    故障转移:
    •master宕机后,EligibleMaster选举为新的主节点。
    •master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。