解决 Elasticsearch 超过 10000 条无法查询的问题

解决 Elasticsearch 超过 10000 条无法查询的问题


问题描述

分页查询场景,当查询记录数超过 10000 条时,会报错。

使用 Kibana 的 Dev Tools 工具查询 从第 10001 条到 10010 条数据。

查询语句如下:

GET alarm/_search
{
  "from": 10000,
  "size": 10
}

查询结果,截图如下:

报错信息如下:

{
  "error": {
    "root_cause": [
      {
        "type": "query_phase_execution_exception",
        "reason": "Result window is too large, from + size must be less than or equal to: [10000] but was [10010]. 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."
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "alarm",
        "node": "hdLJanxRTbmF52eK6-FFgg",
        "reason": {
          "type": "query_phase_execution_exception",
          "reason": "Result window is too large, from + size must be less than or equal to: [10000] but was [10010]. 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."
        }
      }
    ]
  },
  "status": 500
}

原因分析

Elasticsearch 默认查询结果最多展示前 10000 条数据。


解决方案

按照报错信息里的提示,可以看到,通过设置 max_result_window 的值来调整显示数据的大小:

This limit can be set by changing the [index.max_result_window] index level setting.

两种方式可以实现:

【方式一】

修改Elasticsearch 集群中的 配置文件 config/elasticsearch.yml

在配置文件最后增加一行,如下:

max_result_window: 200000000

【方式二】(推荐)

具体操作命令,如下(比如,设置可查询 200000000 条数据,其中 alarm 是index名称):

PUT alarm/_settings
{
  "max_result_window" : 200000000
} 

命令执行效果,截图如下:

再次执行查询语句,即可正常查询,效果截图如下:

原文地址:https://www.cnblogs.com/miracle-luna/p/11153088.html

时间: 2024-10-10 08:05:48

解决 Elasticsearch 超过 10000 条无法查询的问题的相关文章

Dynamics CRM OData 查询超过50条记录的数据(Retrieving More than 50 records using OData)

在通过ODdata方式获取CRM数据时,默认查询出来的results只有50条数据,可以通过JSON返回的Object中的"_next"属性作为URL循环获取直到该属性为空 示例代码如下: relatedAccounts = []; function onload() { var serverUrl = Xrm.Page.context.getServerUrl(); var oDataUri = serverUrl + "/xrmservices/2011/Organiza

Oracle数据库查询用 where in 查询的项超过1000条的解决方案

众所周知,如果我们的用SQL查询语句时,如果用where in带的参数超过1000条的话,oracle是会报错的. 因为项目中遇到这样的问题,所以找到了接下来我要说的这个办法. 因为用的地方很多,所以我把这个封装成了一个方法. /// <summary> /// 获取查询条件超过1000个列表数据的SQL /// columnName In :list /// </summary> /// <param name="list">参数列表</pa

oracle select in超过1000条报错解决方法

本博客介绍oracle select in超过1000条数据的解决方法,java框架是采用mybatis的,这可以说是一种比较常见的错误:select * from A where id in(...),oracle官方函数做了限定,in里的参数只能1000个,所以超过1000个参数就会报错,解决方法是将集合分为每个集合1000的小集合,然后用or拼起来select * from A where id in(1,2,...,1000) or id in (1001,1002,2000)...,好

TXT创建写入,每个文件允许1W条数据。超过1W条数据分割成多个文件

数据量太大,不想每个文件存入过多的数据量怎么办? 规定文件中数据条数是个好办法,那当你在TXT文件中写入数据,怎么保证数据不超过规定条数?超过的又怎么存到另一个TXT文件里面? 下面我就给你介绍一种简单的方法(当然不排除有更好的,我这种算是仅供参考) 1 if ((icount % 10000 == 0) && (icount / 10000 > 0)) 2 { 3 sw.Close(); 4 flag = flag + icount / 10000; 5 path = outpat

学习数据库必须掌握的54条SQL查询语句

--1.查找员工的编号.姓名.部门和出生日期,如果出生日期为空值,显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd. select emp_no,emp_name,dept,isnull(convert(char(10),birthday,120),'日期不详') birthday from employee order by dept --2.查找与喻自强在同一个单位的员工姓名.性别.部门和职称 select emp_no,emp_name,dept,title from emp

一条SQL查询语句是如何执行的

一条SQL查询语句是如何执行的 下面是MySql的基本架构示意图,从图中可以清楚地看到SQL语句在MySQL的各个功能模块中的执行过程. 大体来讲,MySQL可以分为Server层和存储引擎层两部分. Server层 Server层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖了MySql的大多数核心服务功能以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图等. 存储引擎层 而存储引擎层负责数据的存储与提取.其架构模式是插件式的,支持InnoDB.MyISA

解决在转发一条内容为满的彩信,删除主题FWD,发送的时候提示转化为短信。

问题描述: 1.长按一条输入内容为满的彩信,选择转发 2.输入联系人-删除主题FWD-发送 测试结果为:提示正转化为短信(见附件) 预期结果为:不应该有提示,应该还是彩信 测试结果图为: 根据提示的Toast内容"Converting to text message..."进行代码最终进行代码定位到ComposeMessageActivity类的showConvertToSmsToast()方法,并打印堆栈: private void showConvertToSmsToast() {

解决水晶报表提示&ldquo;未知的查询引擎错误&rdquo; FOR VS2010

原文:解决水晶报表提示“未知的查询引擎错误” FOR VS2010 在VS2010环境下运行水晶报表(当然要先装上Crystal Report For VS2010), 在SetDataSource方法附近提示"未知的查询引擎错误",可按如下办法解决:打开app.config,在startup节点添加一个属性useLegacyV2RuntimeActivationPolicy 1: <?xml version="1.0"?> 2: <configu

如何往clob类型中插入一个超过10000 bytes 的字符串

You'll have to assign the value to a variable & use the variable to insert the data DECLARE v_long_text CLOB; BEGIN v_long_text := 'your long string of text'; INSERT INTO table VALUES      (1, v_long_text); END; To make it clear: there are limits set