聚合-分类
什么是聚合?
聚合的常见种类有哪些?
Bucket(分桶):对文档数据分组,并统计每组数量
Metric(度量):对文档数据做计算,例如avg
Pipeline:基于其他聚合结果再做聚合
参与聚合的字段类型必须是:
DSL实现Bucket聚合:
对所有文档进行聚合统计,统计都有哪些品牌 示例:
GET hotel/_search
{
“size”: 0, //设置size为0,结果中不包含文档,只包含聚合结果
“aggs”: { //定义聚合
“brandAgg”: { // 给聚合起个名字
“terms”: { // 聚合的类型,按照品牌值聚合,所以选择term
“field”: “brand”, // 参与聚合的字段
“size”: 20 // 希望获取的聚合结果数量
}
}
}
}
aggs代表聚合,与query同级,此时加不加query的作用是什么?
聚合必须的三要素:
聚合可配置属性有:
size:指定聚合结果数量
order:指定聚合结果排序方式
field:指定聚合字段
#嵌套查询 先按照品牌对文档分组,再进行各种求值: 聚合给我们封装了一个stats,里面有最大值,最小值,平均数等。示例:
GET hotel/_search
{
“size”: 0,
“aggs”: {
“termsByBrand”: {
“terms”: {
“field”: “brand”,
“size”: 20
},
“aggs”: { //是brands聚合的子聚合,也就是分组后对每组分别进行计算
“statsPrice”: { // 聚合名称
“stats”: { //聚合类型,这里stats可以计算min、max、avg等
“field”: “price” // 聚合字段,这里是price(价格)
}
}
}
}
}
}
RestAPI实现聚合
对接前端接口:
1.编写controller接口,接收该请求
2.修改Service层方法,添加RequestParam参数
3.修改getFilters方法的业务,聚合时添加query条件
自动补全
自定义分词器
1.elasticsearch中分词器(analyzer)的组成包含三部分:
- character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
- tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词,还有ik_smart
- tokenizer filter:将tokenizer输出的词条做进一步处理。例如:大小写转换、同义词处理等
拼音分词器注意事项:
自动补全对字段的要求:
数据同步-问题分析
方式一:同步调用
方式二:异步通知
方式三:监听binlog
优点:完全解除服务间耦合
缺点:开启binlog增加数据库负担、实现复杂度高
ES集群-集群节点职责:
master eligible节点的作用是什么?
1.参与集群选主
2.主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求
data节点的作用是什么?
coordinator节点的作用是什么?
ES集群-分布式:
分布式新增如何确定分片?
coordinating node根据id做hash运算,得到结果对shard数量取余,余数就是对应的分片
分布式查询的两个阶段
1.分散阶段:coordinating node将查询请求分发给不同分片
2.收集阶段:将查询结果汇总到coordinating node,整理并返回给用户
故障转移:
1.master宕机后,EligibleMaster选举为新的主节点。
2.master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。