ElasticSearch

一. 基本概述

二. 方法

1. query方法(org.elasticsearch.index.query包)
  • MatchQueryBuilder matchQuery(String name, Object text) {}:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。
  • TermQueryBuilder termQuery(String name, int value) {}:不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹配,则可查询到。

三. 分词

四. 自动补全

五. 调优

代码层面:

  1. query不必要全是must,must是必须满足的条件,如果不是必须,可以用should
  2. 只返回需要的数据集,用public SearchRequestBuilder setFetchSource(@Nullable String include, @Nullable String exclude) {}

索引与配置层面:

  1. 索引读写优化:在settings中"index.store.type":"niofs",读写索引使用Nio file system
  2. 当索引结构比较稳定时,可以使用"dynamic":"strict"以严格模式来动态索引
  3. es6.0版本之前"_all":{"enabled":false}防止所有的字段都被索引起来做分词,可以节省很多空间,提高性能
  4. 在settings中"index.query.default_field":"title" : 默认query_string等是走的all,这样配置可以设置默认查询的索引
  5. 分片大小最好控制在10~20G,性能最佳
  6. 网络波动等造成的分片挂掉后一段时间 , 自动恢复机制开启时 , 数据太多可能会影响集群不稳定 , 可以设置延迟恢复策略"index.unassigned.node_left.delayed_timeout": "5m"延迟五分钟
  7. es刷新索引并不是真正实时刷新 , 而是有默认间隔为1s的刷新 , 可以根据实际情况更改putip:9200/_cluster/settings"index.refresh_interval":"30s"(5.x版本以上不适用 , 有新格式代替)
  8. 节点之间的哨兵机制可能会被jvm的gc中stop the world而判断错误 , 启动恢复策略 , 可以适当调增ping的超时时间与重试次数 , 在配置文件中修改
#节点间存活检测时间
discovery.zen.fd.ping_interval=10s
#存活超时时间
discovery.zen.fd.ping_timeout=60s
#存活超时重试次数
discovery.zen.fd.ping_retries=5
  1. master只协调不存数据node.master=true,node.data=false
  2. jvm设置不要超过总内存50% , 也不要超过32G , 此外设置的越大越好
  3. 硬件上 , 使用ssd
  4. 一次性写入大量数据 , 不要用index的api , 要用bulk , 异步接口提升qps

六. 技术栈

  1. logstash
  2. kibana
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。