elasticsearch2.4升级elasticsearch6.2心得
服务端部分:
一、升级前准备
jdk1.8+;
二、安装步骤
- 下载地址
目前最高版本6.4,谨慎起见目前使用的是6.4之前最新的一个小版本6.3
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/parent-join.html - 创建elasticsearch用户和用户组(elasticsearch为了安全起见禁止了root操作权限)
- tar -zxvf elasticsearch-6.3.2.tar.gz
- 创建 data和logs目录(为后面的数据存储和日志存储的目录,所有创建的目录最后都必须所属elasticsearch用户和 用户组,不然会报没有写的权限错误) elasticsearch对系统每个进程最大同时打开文件数和进程可以拥有的VMA(虚拟内存区域)的数量有要求需要修改以下 两个文件 /etc/security/limits.conf soft nproc 65536 hard nproc 65536 /etc/sysctl.conf(修改完后需要执行sysctl -p 使之生效) vm.max_map_count=262144
- 修改配置文件
# 集群的名字
cluster.name: cunjk
# 节点名字
node.name: node-1
# 数据存储目录(刚刚我们创建的目录的绝对地址)
path.data: /opt/elasticsearch/data
# 日志目录
path.logs: /opt/elasticsearch/logs
#本机的ip地址
network.host: xxx.xxx.x.xxx
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["xxx.xxx.x.xxx]
# 设置节点间交互的tcp端口(集群),(默认9300)
transport.tcp.port: 9300
# 监听端口(默认)
http.port: 9200
# 增加参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
# 开启内联脚本
script.allowed_types: inline
三、注意事项 启动的时候必须使用elasticsearch用户,且安装的elasticsearch先关文件必须是elasticsearch的用户和用户组所属权限
elasticsearch是根据cluster.name来判别集群的,如果服务器上有多个集群必须区分
elasticsearch集群启动必须先启动主节点
代码部分:
一、pom依赖
- lucene依赖7以上,elasticsearch为选定的6.x版本,jdk1.8+
二、API
- 5.x以上废弃父子文档关系,改为使用join连接详见文档https://www.elastic.co/guide/en/elasticsearch/reference/6.3/parent-join.html
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
},
"mappings": {
"_doc": {
"properties": {
"t_join_field": {
"type": "join",
"relations": {
"account": "drug_sale"
}
}
}
}
}
}
- javaAPI参照 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html
- restfulAPI参照 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
三、应用部分值得注意的重要更改
- 创建连接客户端已取消TransportClient.builder()直接构建改为更安全的PreBuiltTransportClient()构建
- 返回的field信息已不支持addField方法,API入口仍然保留但已弃用,github源码声明会在更高的版本完全弃用
- join结构的父子关系不在使用parent(parent_id)指定,理由同addField,此处需借鉴restul接口,直接声明json串
- 5.x以后restful的调用需要声明请求类型 请求需要加上
-H "Content-Type:application/json"
例如 curl -X GET -H "Content-Type:application/json" 'http://xxx.xxx.x.xxx:9200/xxxx/_search?pretty' -d
'{"query": {"has_child": {"type": "drug_sale","query": {"term": {"card_id": "80048540"}}}},"_source":["card_id","name"]}'
- 单次最大查询量,创建索引后需执行,不然会影响滚动查询和全量查询(暂未找到对应配置)
curl -XPUT -H "Content-Type:application/json" 'http://xxx.xxx.xx.xxx:9200/_all/_settings?preserve_existing=true' -d '{"index.max_result_window" : "30000"}'
其他聚合及删除查询API的更改不再赘述
较与版本2.4的比较
一、速度上有了提升,尤其是删除方面6比2多了指定查询删除,在elasticsearch2.4时只能先查后删进行滚动删除比较影响数据更新的速度,6.xz之后的指定删除功能速度提高了好几倍,这样大大的提高了需要删除来进行更新的功能 其次在直接更新的速度上6较与2也有提升
二、在聚合查询和大数据量查询上,elasticsearch6.x 的Sliced Scroll的并行特性可以加快大数据量或需要大量筛查的数据的速度
升级心得
elasticsearch6.3.2的升级和测试持续了三周,在升级过程中遇到一些坑,由于elasticsearch官网对javaAPI的支持并不友好,主要还是restful接口的 描述上述标注的地方有的并未写在文档中,需要去javaAPI翻查源代码对比restful接口调试elasticsearch官网对javaAPI的支持并不全,优先功能建议先 调试restful接口,然后翻查源码,javaAPI的底层仍是调用的restful接口