Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

这篇具有很好参考价值的文章主要介绍了Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、背景

集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。

  • 1、应用对查询要求比较高,search 没有慢查询的状态。

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索
  • 2、集群压测性能不能上去,cpu 使用未打满,查询的 qps 上不去,且有队列堆积。

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

2、优化方法

通过云厂商内核组的同学抓取火焰图发现,主要消耗在 fetch phrase 阶段。

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

ES 默认从_source 取,每次查询都会读取一行数据,并需要做解压,如果对查询耗时要求比较高,应当在查询时关闭 store fields ,查询语句 指定“stored_fields”: [“none”], 砍掉元数据字段,同时用 “docvalue_fields”: [“video_fact_id”], 指定只拉取需要的字段,降低序列化跟网络传输开销。约能提升40% 性能。

推荐DSL如下:

GET /your_index/_search


{


  "query": {


    "match_all": {} // 或者是其他符合你需求的查询


  },


  "stored_fields": ["none"], // 不获取任何存储的字段


  "docvalue_fields": ["field1", "field2"] // 只获取需要的doc value字段


}

3、优化后效率

3.1 查询耗时有进一步的提升

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

3.2 压测时cpu使用率和qps也有了明显的上升

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

压测最终的指标:优化前1800qps,优化后9200qps。

4、优化根因分析

在优化前,由于Elasticsearch默认从_source字段读取数据,这导致每次查询都需要读取整行数据并进行解压。这个过程不仅耗费CPU资源,还会增加响应时间,特别是当文档内容庞大时。

解压操作是CPU密集型的,而在高负载情况下,这可能成为系统瓶颈,从而限制了查询性能和吞吐量。

优化后,通过指定“stored_fields": ["none"],我们有效地排除了_source字段的读取和解压过程,这显著减少了每个查询的CPU负载。

而使用“docvalue_fields”指定从列存中获取字段内容,没有压缩的转换,进一步减少了数据处理的开销。这种方法不仅降低了CPU的使用率,同时只提取必要的字段也减少了了网络传输的负担。

最终,通过这些优化措施,查询的QPS(每秒查询数)得到了显著提升,从1800qps提高到9200qps,这在高性能应用场景中是一个巨大的飞跃。

更高的QPS意味着系统能够更快地处理更多的查询请求,提高了整体的吞吐量和性能。

5、小结

总结来说,通过精细地调整查询策略和减少不必要的数据处理,我们可以显著提升Elasticsearch的性能,这在处理大规模数据和高并发查询的环境下尤为重要。

6、官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#disable-stored-fields

https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-fields.html#docvalue-fields

5、作者介绍

金多安,Elastic 认证专家,Elastic资深运维工程师,死磕Elasticsearch知识星球嘉宾,星球Top活跃技术专家,搜索客社区日报责任编辑

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

es source取字段越多,elasticsearch,php,大数据,搜索引擎,全文检索

比同事抢先一步学习进阶干货!文章来源地址https://www.toymoban.com/news/detail-766771.html

到了这里,关于Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • es查询响应结果中获取某些字段的值

            有时候使用es查询出的结果包含多个字段,如果数据中仅仅包含几个字段时,我们是很容易挑出自己需要的字段值,但是如果数据中包含几十或者几百甚至更多时,尤其是数据中嵌套好多层时,不容易直接挑取出需要的值,这时候可以借助程序直接查找出来。或者

    2024年02月12日
    浏览(55)
  • Python连接Elasticsearch查询索引字段命中数详解

    📚 个人网站:ipengtao.com Elasticsearch是一款强大的搜索和分析引擎,通过其RESTful API,可以方便地与其交互。本篇文章将深入探讨如何使用Python连接Elasticsearch,并通过查询索引某个字段的命中数来实现数据统计的目的。将介绍基础的Elasticsearch查询、高级的聚合查询以及一些常

    2024年02月04日
    浏览(65)
  • trino关于查询elasticSearch中时间字段的问题

    查看官方文档:Elasticsearch connector — Trino 395 Documentation  这段话的意思就是,elasticSearch支持很多时间类型的格式化方式,但是trino中es连接器只支持默认的date类型,就是不能加时间格式化 创建 yc_test_data 索引,索引中包含两个属性create_time 和 name PUT   http://10.226.21.38:9200/yc

    2024年02月16日
    浏览(36)
  • Elasticsearch实现对同一字段既能精准查询也能模糊查询

     使用@MultiField注解给字段取别名并设置为keyword类型 dao层如下 实体类如下 模糊查询测试如下: 可以看到模糊查询content中一共有3条数据有我这个分词  精准查询如下:  可以看到精准查询就只有一条结果,符合精准查询。 注意:该方法需要版本支持,具体版本未知,但是在

    2024年02月02日
    浏览(46)
  • Elasticsearch:ES|QL 查询中的元数据字段及多值字段

    在今天的文章里,我来介绍一下 ES|QL 里的元数据字段以及多值字段。我们可以利用这些元数据字段以及多值字段来针对我们的查询进行定制。这里例子的数据集,请参考文章 “Elasticsearch:ES|QL 快速入门”。 ES|QL 可以访问元数据字段。 目前支持的有: _index :文档所属的索引

    2024年02月04日
    浏览(61)
  • es使用和常用查询(包含多字段聚合查询,实体类方式保存es)

    1.导入es相关jar包 2.增加es配置 3.读取es相关配置   4.创建es实体类,与es mapping设计一致  5.创建es结构  6.创建类继承 ElasticsearchRepository 实现通过api保存实体类ESData到es  7.保存实体类ESData到es  8.es查询 多字段匹配查询,分组查询,分组后聚合

    2024年02月03日
    浏览(49)
  • Elasticsearch es查询结果只返回指定筛选字段_source

    参考:https://www.exception.site/elasticsearch/elasticsearch-query-custom-columns *** 只返回title、channel结果;下列两种语法方式都可以

    2024年02月11日
    浏览(50)
  • 【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

    termQuery matchQuery 模糊查询 multiMatchQuery 多个字段模糊查询 如果时间字段写入时用的类型是Text,可以用“时间字段.keyword”来处理 #查询前传入分页参数 #分页后拿到总记录数 把文档D对应到的映射转换为到文档ID的映射,每个都对应着一系列的文档,这些文

    2024年02月15日
    浏览(118)
  • Mybatis Plus之DQL(条件查询方式、查询投影、查询条件设定、字段映射与表名映射)

    增删改查四个操作中,查询是非常重要的也是非常复杂的操作,这块需要我们重点学习下,这节我们主要学习的内容有: 条件查询方式 查询投影 查询条件设定 字段映射与表名映射 1.1 条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包