elasticSearch 全文搜索调优(一)

    ES虽然擅长于搜索,但面对存储数据量的不断增加,搜索的性能也不断的下降,在现阶段强调用户体验的时候,如果不能实时或者近实时地提供给用户想要的信息,对一个讲究盈利的产品而言是致命的。我也是刚接触这一块的小白,所以第一阶段针对ES的调优,搜集了一些网上比较有效的方法策略,下面做一个总结。

一、refresh_interval

    为了数据的实时性,ES的分片会每隔一段时间刷新一次,默认的时间间隔是1s中,对于只需要查询人物的索引而言,刷新会是一种不必要的损耗,所以可以禁掉这个,将其设置为-1,当数据更新时,可以手动刷新;

二、禁止swap

    一旦允许内存与磁盘的交换,会引起致命的性能问题。 通过: 在elasticsearch.yml 中 bootstrap.memory_lock: true, 以保持JVM锁定内存,保证ES的性能。

三、禁止大翻页    

    在使用 Elasticsearch 过程中,应尽量避免大翻页的出现。正常翻页查询都是从 From 开始 Size 条数据,这样就需要在每个分片中查询打分排名在前面的 From + Size 条数据。协同节点收集每个分配的前 From + Size 条数据。协同节点一共会受到 N * ( From + Size )条数据,然后进行排序,再将其中 From 到 From + Size 条数据返回出去。如果 From 或者 Size 很大的话,导致参加排序的数量会同步扩大很多,最终会导致 CPU 资源消耗增大。可以通过使用 Elasticsearch scroll 和 scroll-scan 高效滚动的方式来解决这样的问题。

四、搜索语句的过滤条件

    当存在多个过滤条件时,不同的放置顺序对搜索效率也会有很大影响,例如,如果A条件能够过滤出1000条数据,B条件能够过滤出100条数据,就应当将B条件放置在A条件之前

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Elasticsearch的单节点部署调优,可以考虑以下几个方面: 1. 堆内存设置:默认情况下,Elasticsearch将堆内存分配给JVM的50%,可通过修改`jvm.options`文件中的`-Xms`和`-Xmx`参数来调整。适当增加堆内存大小可以提高性能,但要确保不会超出可用内存。 2. 线程池配置:Elasticsearch使用线程池来处理各种操作,包括读取、写入和搜索。可以通过修改`elasticsearch.yml`文件中的以下参数来优化线程池的配置: - `thread_pool.write.queue_size`:写入操作的队列大小,默认是200。 - `thread_pool.search.queue_size`:搜索操作的队列大小,默认是1000。 增加队列大小可以在高负载时缓冲请求,减少请求被拒绝的可能性。 3. 索引和分片配置:考虑数据量和查询需求来合理设置索引的分片数量。通常情况下,每个节点上的分片数不宜过多,建议每个节点控制在20个以下。 4. JVM垃圾回收调优:可以通过调整JVM的垃圾回收策略来提高性能。可以修改`jvm.options`文件中的`-XX:+UseConcMarkSweepGC`参数启用CMS垃圾回收器,或者使用G1垃圾回收器。 5. 文件描述符限制:Elasticsearch使用大量的文件句柄来处理数据和查询操作。确保操作系统中的文件描述符限制足够大,可以通过修改`/etc/security/limits.conf`文件来增加限制。 以上是一些常见的调优建议,具体的调优策略还需要根据具体的部署环境和需求来进行调整。同时,建议在调优之前对系统进行性能测试和监控,以便及时发现问题并进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值