ElasticSearch DSL优化,让你的查询快100倍!

面对10亿条数据,一个term查询在3个节点的集群上耗时80ms,仅能实现300qps。通过深入研究,发现查询条件匹配的数据多达1亿条,导致协调节点处理大量id。解决方案在于添加`terminate_after`参数,限制每个分片返回的文档数量,从而将查询时间降至3ms,显著提高并发性能。
摘要由CSDN通过智能技术生成

起因

     最近一直苦恼于elasticsearch中的一个查询,总数据量10亿条,按条件term查询,只取符合条件的10条数据,3个集群节点(64G 32C),查询耗时80ms,并发一直上不去,只有300qps。按理说,既无排序又无算分,不应该那么慢才对!

GET demo/_search
{
  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "term": {
          "tags.name": "文章"
        }
      }
    }
  },
  "size": 10
}

 

解决方案

     找了一番资料,原来是符合这个查询条件的数据很大,达到1亿条,每个分片将其所有符合条件的数据的id 返回到协调节点,协调节点再取10个id去查询数据返回给客户端,虽然分片是返回数据的id,但是数据量大的时候也是很耗时的,有没有办法控制分片返回的数据量呢?答案是有的

    添加参数:terminate_after

GET demo/_search
{
  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "term
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值