昨日内容回顾:
from+size 不能大于10000会有深度分页问题 (百度大约只能翻76页)
highlight 高亮三要素:那个字段高亮、前置、后置标签
返回结果:A、高亮结果单独的在一个字段中
B、source内容并没有高亮处理
今日学习知识:上午
学习内容:数据聚合、自动补全、数据同步(数据库、索引库)、集群(搭建集权、es面试点)
数据聚合:
1、Bucket aggregations 分组(桶)聚合:
2、Metrics aggregations 度量聚合:最大、最小、平均值
3、Pipeline aggregations 管道聚合:可以进行嵌套、聚合结果再做聚合
//--1、什么是聚合: 聚合是对文档数据的统计、分析、计算
//--2、聚合字段必须是:keyword、数值、布尔、日期
分词字段不能聚合、不能排序
分组聚合:
#对所有文档进行聚合统计、统计当前有哪些品牌
GET hotel/_search
{
"size": 0, //:设置结果只包含聚合结果
"aggs": { //:定义集合,设置聚合条件
"brandAgg": { //:自定义的聚合名称
"terms": { //:分组
"field": "brand", //:按照那个字段分组、指定字段分组
"size": 3 //:显示几条分组结果
"order": {
"_count": "asc" //:按照count升序排序
}
}
},
"cityAgg":{
"terms": {
"field": "city",
"size": 8
}
}
}
//--1、聚合必须三要素:名称、类型、字段聚合
//--2、现在文档聚合范围
RestAPI实现聚合:
分组值、分组数量
聚合-RestClient:
对接前端接口:
//1、创建搜索请求
//2、设置query查询条件
//3、设置size = 0
//4、设置 聚合请求条件 brand分组 city分组 starName分组
//5、执行聚合搜索请求
//6、解析响应内容 获取聚合结果 brand分组 city分组 starName分组
//7、将结果封装成 Map<String,List<String>>
自动补全:
自定义分词器:
不用写--老师都写不出来--理解最重要!! 支持拼音搜索 //步骤:1、下载pinyin分词器到虚拟机里 2、重启
PUT /test
{
"settings": {
"analysis": {
"analyzer": { // 自定义分词器
"my_analyzer": { // 自定义分词器名称
"tokenizer": "ik_max_word",
"filter": "py"
}
},
"filter": { // 自定义tokenizer filter
"py": { // 过滤器名称
"type": "pinyin", // 过滤器类型,这里是pinyin
"keep_full_pinyin": false,
"keep_joined_full_pinyin": true,
"keep_original": true,
"limit_first_letter_length": 16,
"remove_duplicated_term": true,
"none_chinese_pinyin_tokenize": false
}
}
}
},
"mappings": { //--映射
"properties": {
"name": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "ik_smart"
}
}
}
}
//--面试官会问遇到那些问题?? 需回答 有
映射 为避免搜到同音字 搜索时,不要使用拼音分词器搜索条件改为ik分词器
RestAPI实现自动补全:
先看请求参数构造的API:
酒店数据自动补全:
实现思路如下:
今日学习知识:下午
数据同步:
1、同步调用:实现简单、业务耦合度高
2、异步通知:低耦合、依赖mq的可靠性
3、监听binlong:完全解除服务间耦合、开启binloh增加数据库负担
监听 :队列、交换机、路由
ES集群
高可用方案 主分片和副分片不会再一台机器上 每一个节点 都会有一个副本
es里面有自己的节点通讯机制 故障恢复
master ture 主节点 data false 子节点
// -- 跟面试官聊天的时候,主动去说分页的知识!!! 加分项
分布式新增如何确定分片??
coordinating node 根据id做hash运算,得到结果对shard数量区域,余数就是对应的分片
分布式查询的两个阶段
分散阶段: coordinating node将查询请求分发给不同分片
收集阶段: 将查询结果汇总到 coordinating node ,整理并返回给用户d
自动补全
自定义分词器
1.elasticsearch中分词器(analyzer)的组成包含三部分:
- character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
- tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词,还有ik_smart
- tokenizer filter:将tokenizer输出的词条做进一步处理。例如:大小写转换、同义词处理等
拼音分词器注意事项:
为了避免搜索到同音字,搜索时不要使用拼音分词器
自动补全对字段的要求:
1.类型是completion类型
2.字段值是多词条的数组
数据同步-问题分析
方式一:同步调用
优点:实现简单,粗暴
缺点:业务耦合度高
方式二:异步通知
优点:低耦合,实现难度一般
缺点:依赖mq的可靠性
方式三:监听binlog
优点:完全解除服务间耦合
缺点:开启binlog增加数据库负担、实现复杂度高
ES集群-集群节点职责:
master eligible节点的作用是什么?
1.参与集群选主
2.主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求
data节点的作用是什么?
数据的CRUD
coordinator节点的作用是什么?
1.路由请求到其他节点
2.合并查询到的结果,返回给用户
ES集群-分布式:
分布式新增如何确定分片?
coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片
分布式查询的两个阶段
1.分散阶段:coordinating node将查询请求分发给不同分片
2.收集阶段:将查询结果汇总到coordinating node,整理并返回给用户
故障转移:
1.master宕机后,EligibleMaster选举为新的主节点。
2.master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全