繁体   English   中英

elasticsearch搜索请求大小限制错误

[英]elasticsearch search request size limit error

我的 elasticsearch 版本 7.9.3(在 ubuntu 上运行)保存每天的索引(日志),因此当查询需要包含例如从 2020-01-01 到 2020-11-20 的数据时

搜索查询将如下所示:(返回错误 400)

http://localhost:9200/log_2020-02-14,log_2020-02-26,log_2020-02-27,log_2020-04-24,log_2020-04-25,log_2020-07-17,log_2020-08-01,log_2020-09-09,log_2020-09-21,log_2020-10-06,log_2020-10-07,log_2020-10-08,log_2020-10-16,log_2020-10-17,log_2020-10-18,log_2020-10-21,log_2020-10-22,log_2020-11-12/_search?pretty

我知道我可以将请求分成两部分,但我不明白为什么(HTTP 上的 4096 字节并不是那么大)

有机会配置这个问题吗?

回复:

{
    "error": {
        "root_cause": [
            {
                "type": "too_long_frame_exception",
                "reason": "An HTTP line is larger than 4096 bytes."
            }
        ],
        "type": "too_long_frame_exception",
        "reason": "An HTTP line is larger than 4096 bytes."
    },
    "status": 400
}

URL 不能超过特定大小,具体取决于媒体。 Elasticsearch 将该长度限制为 4096 字节。

由于您似乎愿意查询 2020 年从 1 月 1 日到今天(11 月 20 日)的所有索引,您可以使用这样的通配符:

http://localhost:9200/log_2020*/_search?pretty

另一种方法是利用别名并将所有 2020 索引放在log_2020别名后面:

POST /_aliases
{
  "actions" : [
    { "add" : { "index" : "log_2020*", "alias" : "log_2020" } }
  ]
}

运行后可以直接查询别名

http://localhost:9200/log_2020/_search?pretty

如果您想确保所有日常索引在创建时都获得别名,您可以添加一个索引模板

PUT _index_template/my-logs
{
  "index_patterns" : ["log_2020*"],
  "template": {
    "aliases" : {
        "log_2020" : {}
    }
  }
}

更新

如果您需要在 2020-03-04 和 2020-09-21 之间查询,您可以使用日期字段上的range查询来查询log_2020别名

POST log_2020/_search
{
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2020-03-04",
        "lt": "2020-09-22"
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM