天天看点

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条件之前

继续阅读