本文主要讲述了对ES的启动后优化。主要采用以es-head插件的方式。
1、索引分片的优化:其中包括索引分片的数量控制、分片的副本数量控制
在head插件中执行操作如图,其中的PUT
处可以选择为其他HTTP方法:
刷新结果:
新增索引时,如果不指定分片数量,则默认为5.(单节点强制副本时,所有副本会挂在空节点上,如上图)
指定数量的插入:
PUT http://localhost:9200/secisland/
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 3
}
}
前面的PUT为HTTP方法,中间的是ES的地址,后面的secisland为新建的索引名。
注意:如果只有一个节点的话,不建议使用分片。
指定节点功能,指定数据节点、主节点等,node.master: true
,node.data: false
。数据节点关闭http等, http.enable: false
。
搜索优化
中文分词
ES的默认分词器为标准分词器。其英文分词是基于空格和标点符号,可以说是well done。而中文分词是基于汉字的,比如搜索“大数据”会将“大”“数”“据”三个字分开搜索,而我们实际期望的是大数据作为一个整体,或者有“大数据”的内容靠前。这时候需要一个分词器——ik分词器。
测试分词链接:
http://localhost:9200/hospital/_analyze?analyzer=standard&pretty&text=ES是大数据
注意替换其中的分词器:细粒度的为ik_max_word;粗粒度的为ik_smart。
下载中文分词器:
在elasticsearch目录下,执行以下命令(注意es修改版本号),自动下载解压到plugin目录下:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.1/elasticsearch-analysis-ik-5.6.1.zip
完成后重启即可。
ps:也可以新建分词器。分词器即*.dic就是一堆短词用回车分割。
索引中添加“index.stroe.type”:"niofs"(6.x默认取系统最优选择,可以不用设置)
mapping 中添加:
"dynamic":"strict",
"_all":{
"enabled":"false"
}
ps:6.0 废弃该字段。
分片数的控制:建议每个分片的大小在10-20G。然后决定分片的数量。
针对于某些表现出assign的节点(这是节点短暂掉线):"index.unassigned.node_left.delayed.timeout":"5m"
禁止通配符删除:
{
"transient":
{
"action.destructive_requires_name":true
}
}
节点间的检测:
# 节点间的存活检测间隔
discovery.zen.fd.ping_interval: 10s
# 节点间检测超时时间
discovery.zen.fd.ping_timeout: 120s
# 检测超时重试次数
discovery.zen.fd.ping_retries: 5
bulk是一个异步的接口。