【elasticsearch】关于elasticsearch的max_result_window限制问题的解决方式思考

这篇具有很好参考价值的文章主要介绍了【elasticsearch】关于elasticsearch的max_result_window限制问题的解决方式思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事情起因:我们使用es作为日志搜索引擎,客户收集到的业务日志非常之大,每次查询后,返回页数较多,由于我们web界面限制每页返回150条,当客户翻到66页之后就会报错。

文章目录

前言

二、实验

1.默认生成20条数据

2.默认查询

3.Search after查询

4.Search after二次查询

总结


前言

报错信息如下:

  • Elasticsearch limits the search result to 10000 messages. With a page size of 150 messages, you can use the first 66 pages. Unable to perform search query: Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [34050]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.].

一、Search after介绍

        使用Search after作为查询,默认情况下我们使用Scroll search作为查询,可以指定From + size 大小的数据批量返回,这是为了防止因为请求过多的结果而导致内存和CPU资源过度消耗。

        查询结果的分页可以通过使用from and size 来完成,但是当达到深度分页时,成本变得令人望而却步。 默认为 10000 是一种保护措施,搜索请求占用的堆内存和时间成正比。 建议使用 scroll API 来实现高效的深度滚动,但滚动上下文成本高昂,而且成本不高,建议将其用于实时用户请求。 Search after通过提供实时游标来规避此问题。 这个想法是使用上一页的结果来帮助检索下一页。

二、实验

1.默认生成20条数据

for i in `seq 1 20`
do 
    echo 192.168.113.195 -d -P 54000 "zhongguoren $i"
    sleep 1
done

2.默认查询

GET index_1/_search
{
  "query": {
    "match": {
      "message": "zhongguoren"
    }
  },
  "sort": [
    {
      "timestamp": "asc"
    }
  ]
}

默认返回20条数据,通过默认查询知识确认,每条信息的流入时间和条数,目前按照1-20进行排序,没有重复的时间戳。

3.Search after查询

index_1/_search
{
  "size": 10,
  "query": {
    "match": {
      "message": "zhongguoren"
    }
  },
  "sort": [
    {
      "timestamp": "asc"
    },
    {
      "_id": "asc"
    }
  ]
}

先查询前10条,这个和之前默认查询有个区别,就是排序时通过timestamp和_id进行同时排序,在查询结果中得到一个sort字段,值为

"sort": [ - 
          1680770417895,
          "a894bf71-d456-11ed-aa52-000c29f6b211"
        ]

查询后结果值为:

{ - 
  "took": 223,
  "timed_out": false,
  "_shards": { - 
    "total": 4,
    "successful": 4,
    "skipped": 0,
    "failed": 0
  },
  "hits": { - 
    "total": { - 
      "value": 20,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [ - 
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "2df06a80-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 35834,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVC899ZZXDJXF453F0RVXJ",
          "message": "<5>Apr 6 16:36:52 root: zhongguoren 1",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:36:52.135"
        },
        "sort": [ - 
          1680770212135,
          "2df06a80-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "5244ccf0-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 52885,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVE3XCWZK71D74YVF58PZ2",
          "message": "<5>Apr 6 16:37:53 root: zhongguoren 2",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:37:53.086"
        },
        "sort": [ - 
          1680770273086,
          "5244ccf0-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "5e46d610-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 57417,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVEQFJP3CN17A2NG41YYHY",
          "message": "<5>Apr 6 16:38:13 root: zhongguoren 3",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:38:13.232"
        },
        "sort": [ - 
          1680770293232,
          "5e46d610-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "644eb870-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 52483,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVF1BQNJZ48GW39G48DQNQ",
          "message": "<5>Apr 6 16:38:23 root: zhongguoren 4",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:38:23.350"
        },
        "sort": [ - 
          1680770303350,
          "644eb870-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a562e070-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 45404,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJC1YT9SPVWG81CJGBMXG",
          "message": "<5>Apr 6 16:40:12 root: zhongguoren 5",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:12.534"
        },
        "sort": [ - 
          1680770412534,
          "a562e070-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a609f5e0-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 33127,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJD1Y45HAS4N7ZN2YXWS0",
          "message": "<5>Apr 6 16:40:13 root: zhongguoren 6",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:13.629"
        },
        "sort": [ - 
          1680770413629,
          "a609f5e0-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a6a328a0-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 41301,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJE1A0ER5S5BZ8DJKW2A6",
          "message": "<5>Apr 6 16:40:14 root: zhongguoren 7",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:14.633"
        },
        "sort": [ - 
          1680770414633,
          "a6a328a0-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a73c3451-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 36916,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJF0PXMNPGKVZ7YEJ1JNY",
          "message": "<5>Apr 6 16:40:15 root: zhongguoren 8",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:15.637"
        },
        "sort": [ - 
          1680770415637,
          "a73c3451-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a7dfc750-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 140,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 42778,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJG26BRZG09JSSA96S329",
          "message": "<5>Apr 6 16:40:16 root: zhongguoren 9",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:16.708"
        },
        "sort": [ - 
          1680770416708,
          "a7dfc750-d456-11ed-aa52-000c29f6b211"
        ]
      },
      { - 
        "_index": "12_149",
        "_type": "_doc",
        "_id": "a894bf71-d456-11ed-aa52-000c29f6b211",
        "_score": null,
        "_source": { - 
          "elap_accounted_message_size": 141,
          "elap_source_input": "636c90d3246ca975ec999b24",
          "streams": [ - 
            "6969696969697379736c6f67",
            "6969696969727379736c6f67"
          ],
          "elap_remote_port": 53090,
          "elap_source_node": "5bb5d963-7fdd-4e2d-bfdf-a5069bb07097",
          "source": "192.168.113.195",
          "elap_message_id": "01GXAVJH78H4GCQ44KNZQ1MQ0H",
          "message": "<5>Apr 6 16:40:17 root: zhongguoren 10",
          "elap_remote_ip": "192.168.113.195",
          "timestamp": "2023-04-06 08:40:17.895"
        },
        "sort": [ - 
          1680770417895,
          "a894bf71-d456-11ed-aa52-000c29f6b211"
        ]
      }
    ]
  }
}

4.Search after二次查询

可以根据sort值带入到后续得search after中,以做到从某点进行再次查询。

GET index_1/_search
{
  "size": 10,
  "query": {
    "match": {
      "message": "zhongguoren"
    }
  },
  "search_after": [
    1680770417895,
    "a894bf71-d456-11ed-aa52-000c29f6b211"
  ],
  "sort": [
    {
      "timestamp": "asc"
    },
    {
      "_id": "asc"
    }
  ]
}

返回结果中,得到11-20条数据。


总结

我也尝试过,直接从16条的sort字段值进行查询,同样可以查询到17-20的值,所以,我们可以进行改造,默认仍然是10000条的max_result_window,兼顾小批量数据的查询和搜索,当查询从66页往后时,每次翻页或者跳页我们要能获取到超过10000的最后一条信息的id和时间戳,由此解决es深度查询翻页的问题。

明天找产品聊聊实现逻辑。文章来源地址https://www.toymoban.com/news/detail-455616.html

到了这里,关于【elasticsearch】关于elasticsearch的max_result_window限制问题的解决方式思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于Windows 11 docker desktop 运行doris 容器时vm.max_map_count=2000000的设置问题

    需要一个简单的测试环境,于是准备用docker启动一个1fe 1be的简单玩一下 如果be容器启动后再去修改 /etc/sysctl.conf sysctl -w vm.max_map_count=2000000 这个参数是没用的,be仍然会启动失败 这时可以打开cmd wsl --list C:Userspcwsl --list 适用于 Linux 的 Windows 子系统分发: Ubuntu (默认) docker-des

    2024年02月11日
    浏览(50)
  • ES实战-result window is too large

    做分页查询,当分页达到一定量的时候,报如下错误: 原因分析: es对from + size的大小进行限制,必须小于等于10000。 方案一(有风险) 将max_result_window参数阈值调大,在业务中限制分页大小,使from+size=10000; 具体操作 改法一: 动态更改索引设置,为max_result_window参数赋值足够

    2024年03月15日
    浏览(62)
  • 关于“A Native Collection has not been disposed, resulting in a memory leak. Enabl”问题

    提示:这里简述项目相关背景: 例如:当在进行 UnityWebRequest 请求数据时候,打印就报错显示“ A Native Collection has not been disposed, resulting in a memory leak. Enabl ”,但不能定位错误的地方在哪,于是百度也没有明确答案,然后摸索一番,后面是老大告诉我的,记录一下; 提示:这

    2024年02月12日
    浏览(32)
  • 微信小程序上传代码, Error: 分包大小超过限制,main package source size 4732KB exceed max limit 2MB

    (1)新建文件夹pagepart (2)文件夹新建页面 (3)修改app.json 结束 目前就分包完成了 可以在微信开发者工具 详情基本信息中查看当前分包大小 (1)用画图软件打开照片,把数值改小 总结 可以右击查看属性,查看照片的的大小 要是有什么写的不对的地方,请大佬多多指教

    2024年02月16日
    浏览(78)
  • Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)

    fs.inotify.max_user_watches 参数是用于控制 Linux 内核中 inotify 子系统的观察者数量限制。inotify 是一种文件系统监控机制,它可以用于检测文件或目录的变化,并在事件发生时通知相关的应用程序。 具体而言, fs.inotify.max_user_watches 参数限制了每个用户所能创建的 inotify 实例的数量

    2024年02月06日
    浏览(43)
  • keycloak~关于session idle和session max的解释

    keycloak可以帮助我们实现这个功能:用户token每5分钟失效一次,失效后通过refresh_token来换新的token,而refresh_token每30天失效一次,但如果用户3天都没有任何操作(就是没有用refresh_token去换新的token),那么3天后也让refresh_token失效,用户需要从新去登录。 领域设置-Tokens中,有

    2024年02月05日
    浏览(41)
  • elasticsearch启动报max file descriptors [65535]

    环境centos7   es版本elasticsearch-5.4.0 今天安装es,启动一直报ERROR: bootstrap checks failed max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536] 第一检查这三个文件是否配置正确  vim  /etc/security/limits.conf vim /etc/profile   把ulimit注释掉 修改 /etc/sysctl.conf 添加配置:

    2024年02月15日
    浏览(36)
  • Elasticsearch索引数量限制

    Elasticsearch的索引可以无限创建吗? Elasticsearch 7.9.1 Elasticsearch启动 Elasticsearch启动采用默认配置 代码 使用SpringBoot编写测试代码,对ES进行索引创建测试。 SpringBoot连接配置 测试类代码 单机测试,设置每个索引占用4个分片,0个副本,先创建1000个索引进行测试,是否能创建成功

    2023年04月08日
    浏览(43)
  • Elasticsearch报错:search.max_async_search_response_size

    Elasticsearch报错: Can\\\'t store an async search response larger than [10485760] bytes. This limit can be set by changing the [search.max_async_search_response_size] setting. 导致上述问题的原因是,ES默认response的大小是10mb,而返回的值超过了,解决方案,在confgi/下面找到elasticsearch.yml,如果elasticsearch.yml没有定义

    2024年02月11日
    浏览(79)
  • GreatSQL一个关于主从复制的限制描述与规避

    分享一个在项目运维中遇到的一个主从复制限制的一个坑,项目的架构为主集群+灾备集群,每个集群为一主两从模式。主集群到灾备集群的同步为主从复制的方式,根据业务需求灾备集群需要忽略系统库跟某些配置表,所以才会触发此限制,而这个限制如果我们之前没有遇到

    2024年02月08日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包