elasticsearch搜索功能(二)
01数据聚合
聚合的种类
参与聚合的字段类型一定是不分词的可以是keyword,数值,日期,布尔
DSL实现聚合
RestAPI实现聚合
02自动补全
拼音分词器
自定义分词器
自动补全查询
实现酒店搜索框自动补全
对name字段做指定分词器
suggestion对应java中的List
解析获取数据
02数据同步
数据同步思路分析
方案一,同步调用
方案二:异步通知
方案三:监听mysql的binlog日志
实现es与数据库数据同步
申明交换机,队列和路由key
es集群
搭建集群
单机es所存在的问题
- 海量的数据存储
- 单点故障问题
由于钞能力不够,现在使用docker来模拟3个es节点,但也要要求linux服务器至少有4G的内存空间
首先编写一个docker-composed文件,内容如下:
version:'2.2'
services:
es01:
image: elasticsearch:7.12.1
container_name:es01
enviroment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_host=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPT=-Xms512m -Xms512m"
volumes:
- data01:/usr/share/elasticsearch/data
port:
- 9200:9200
network:
- elastic
es02:
image: elasticsearch:7.12.1
container_name: es02
enviroment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_host=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPT=-Xms512m -Xms512m"
volumes:
- data01:/usr/share/elasticsearch/data
port:
- 9201:9200
network:
- elastic
es03:
image: elasticsearch:7.12.1
container_name: es03
enviroment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_host=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPT=-Xms512m -Xms512m"
volumes:
- data01:/usr/share/elasticsearch/data
port:
- 9202:9200
network:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
es运行需要修改一些linux系统权限,修改/etc/sysctl.conf文件
vim /etc/sysctl.conf
添加内容
vm.max.map_count=262144
然后执行命令,让配置生效
sysctl -p
集群监控
kibana可以监控es集群,不够新版本需要依赖es的x-pack功能配置比较复杂
这里推荐使用cerebro来监控es的集群状态
利用cerebro做集群分片和副本
es集群中不同角色有不同的职责划分
集群脑裂问题
集群故障转移
集群分布式存储
集群中新增文档流程
集群分布式查询