Elasricsearch搜索速度优化

Elasricsearch搜索速度优化

1.合理设置副本数量
  增加副本,可以提升搜索的能力。
  如果副本设置过多,会对服务器造成额外的压力,因为主分片需要给所有副本同步数据。另外,副本过多也会占用磁盘空间。一般建议最多设置2-3个即可。
在这里插入图片描述
2.设置分片数量
  如果分片数过少或过多,都会导致检索比较慢。分片数过多会导致检索时打开比较多的文件,另外也会导致多台服务器之间通讯。而分片数过少会导至单个分片索引过大,所以检索速度也会慢。
  建议单个分片最多存储20G左右的索引数据,所以,分片数量=数据总量/20G

2.设置memory_lock来锁定进程的物理内存地址
  避免内存交换(swapped)来提高性能
  修改文件conf/elasticsearch.yml
  bootstrap.memory_lock: true

3.修改配置文件调整ES的JVM内存大小
  修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建议设置一样大,避免频繁的分配内存,根据服务器内存大小,一般分配60%左右(默认256M)
  注意:内存最大不要超过32G【详情请看如下的截图和文字说明】
一旦你越过这个神奇的32 GB边界,指针会切换回普通对象指针.。每个指针的大小增加,使用更多的CPU内存带宽。事实上,你使用40~50G的内存和使用32G的内存效果是一样的。
在这里插入图片描述
在这里插入图片描述

4.针对不使用的index,建议close,减少内存占用
  因为只要索引处于open状态,索引库中的segement就会占用内存,close之后就只会占用磁盘空间了。

curl -XPOST 'localhost:9200/index/_close'

5.删除文档时要注意清除文档
  在es中删除文档,数据不会马上在硬盘上除去,而是在es索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,es在检索过程会判断是否删除了,如果删除了在过滤掉。这样也会降低检索效率。
所以可以执行清除删除文档:

curl -XPOST 'http://ip:9200/index/_forcemerge?only_expunge_deletes=true'
client.admin().indices().prepareForceMerge("zhouls").setOnlyExpungeDeletes(true).get();

6.把log输出水平改为info
  log输出的水平默认为trace,即查询超过500ms即为慢查询,就要打印日志,造成cpu和mem,io负载很高。把log输出水平改为info,可以减轻服务器的压力。
  修改ES_HOME/conf/logging.yaml文件

7.段合并
  为不再更新的只读索引,执行段合并操作,合并成单个分段。

8.导入停止词
  注意每个节点都需要导入一次,导入后重启es。
在这里插入图片描述
在这里插入图片描述
9.文档模型
  文档应合理建模,避免join操作,嵌套查询。

10.使用二级索引
  现在的大数据量的全文检索,基本使用es+hbase进行二级索引,es保存hbase中的rowkey,极大减少了es数据量大小。

11.按照可用的维度,例如时间来分索引,每个月一个索引,通过别名的方式关联各个索引。

…持续更新中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值