首先上版本号:ES 版本:6.5.4
一般来说ES 的默认参数已经能够满足大部分场景需求,不需要也不建议我们去调节。
但是根据不同的业务场景我们还是可以做一些系统调优,接下来针对常用的参数总结如下:
1、_routing
参数作用是将文档路由到不同的分片,默认是根据hash(document’s _id
) 进行路由的,默认情况,如果我们根据某些条件进行检索时,由于没有指定_routing,请求会分发到所有分片进行检索然后聚合。
这对于某些场景明显是比较耗时的,哪些场景我们等下描述,首先我们讲下问什么耗时?第一:查询请求会分发到所有分片里,分发的过程首先会浪费时间,另外我们知道木桶效应,只要一个节点的查询速度慢,会导致整个请求的查询时间变慢。
那什么场景适合自定义_routing 呢?像根据用户ID 查询订单这个场景,单个用户的订单量一般是比较少的,这种场景很适合我们自定义_routing, 这样我们查询某个用户订单的时候制定uid,就可以快速查询到,节点越多,这个优化的效果约明显。
2、number_of_replicas
参数定义我们数据存储的分片数,主要是为了数据的高可靠性,一个副本坏掉可以从其他副本恢复,对于我们大部分日志系统来说数据丢失也可以接受的,对于日志系统来说我们是可以把副本数设置为1甚至是0
3、文件的字段类型 keyword 和text
从ES 5.2 版本以后ES 去掉了String类型,增加了keyword 和text 字段类型
对于text字段类型的字段在创建时会默认进行分词,例如:我喜欢编程, 存储时会存储三个倒序 索引,{我,喜欢,编程} => 文档ID。
如果我们需要精确查询的时候,比如根据订单ID去查询的时候,一般情况我们是需要精确查询 的,这时候我们在创建索引的时候就需要把字段设置为keyword类型的,不仅可以节省磁盘空 间,而且也会明显提升我们的查询效率。
4、JVM
一般建议 Xms 和 Xmx设置一样大,对于低于64G内存的机器,设置为不大于机器内存的1/2. 留足够大空间给pageCache, 对于大于64G内存的机器,不建议Xmx > 32G,可以部署多个进程去充分利用内存。