Elasticsearch大数据查询优化(RequestOptions gzip压缩)

357 阅读1分钟

有时候我们在ES的查询的数据量比较大(字段较多&数据量比较大)。怎样去优化一个查询速度。

  • 在使用query的可以使用filter来代替must。filter不会计算分数会优先走缓存。
  • 开启es的数据压缩,可以将数据压缩比原始大小更小减少网络延迟。

主要记录一下Java es client开启数据gzip压缩。

只有客户端请求压缩时Elasticsearch才压缩数据。Java 客户端通过http request发送额外请求选项要求压缩。

实例代码:

//开启 gzip 压缩
RequestOptions requestOptions = RequestOptions.DEFAULT.toBuilder()
    .addHeader("Accept-Encoding", "gzip, deflate")
    .addHeader("Content-type", "application/json")
    .build();

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//公司id列表筛选
boolQueryBuilder.filter(QueryBuilders.termsQuery("companyId", companyIdList));

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.timeout(new TimeValue(60L, TimeUnit.SECONDS));
sourceBuilder.from(0);
sourceBuilder.size(10000);
sourceBuilder.query(boolQueryBuilder);
//查询请求
SearchRequest searchRequest = new SearchRequest(new String[]{"test_index"}, sourceBuilder);
SearchResponse resp = restHighLevelClient.search(searchRequest, requestOptions);
  <elasticsearch>7.8.0</elasticsearch>

注意:Elasticsearch 7.8以上版本中 rest高级客户端会自动解压数据。

Elasticsearch 7.7 及以下版本处理压缩响应

​ 高级不支持处理压缩数据,当接收到压缩响应会直接抛出运行时异常。低级客户端提供Elasticsearch原始响应,因此可以进行解压。需要额外操作可以查阅官网。

在我们服务端请求es的时候数据已经压缩了,但是我们服务端到前端是请求还是没有压缩,大数据也是非常占用网络带宽。

以Spring boot 开启我们的压缩配置为例:

server:
  compression:
    enabled: true
    mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plain
    min-response-size: 2KB