除非使用关键字,否则按时间戳范围查询不起作用

query by timestamp range not working unless with keyword

ElasticSearch 新手问题:

我有以下数据 http://localhost:9200/tutorial/_doc/7:

"_index":"tutorial","_type":"_doc","_id":"7","_version":3,"_seq_no":25,"_primary_term":2,"found":true,
"_source":{
  "message": "error",
  "@timestamp": "2022-05-16T09:40:00"
}

并且我正在尝试通过以下请求查找 @timestamp2022-05-16T09:30:002022-05-16T09:50:00 之间的所有记录:

POST http://localhost:9200/tutorial/_search
Content-Type: application/json

{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "@timestamp.keyword": {
                  "gt": "2022-05-16T09:30:00",
                  "lte": "2022-05-16T09:50:00"
                }
              }
            }
          ]
        }
      }
    }
  }
}

我的问题是,为什么我必须使用 @timestamp.keyword 而不是 @timestamp 作为 range 下的值?如果我使用没有 keyword 的那个,我将一无所获。

一点上下文,我正在设置需要 @timestamp 字段的 Elastalert。我检查了它发送到 ElasticSearch 的请求是否将 @timestamp 作为没有 keyword 的范围,因此它没有给我任何价值。

http://localhost:9200/tutorial 的结果如果有帮助:

{
   "tutorial":{
      "aliases":{
         
      },
      "mappings":{
         "properties":{
            "@timestamp":{
               "type":"text",
               "fields":{
                  "keyword":{
                     "type":"keyword",
                     "ignore_above":256
                  }
               },
               "fielddata":true
            },
            "message":{
               "type":"text",
               "fields":{
                  "keyword":{
                     "type":"keyword",
                     "ignore_above":256
                  }
               }
            }
         }
      },
      "settings":{
         "index":{
            "routing":{
               "allocation":{
                  "include":{
                     "_tier_preference":"data_content"
                  }
               }
            },
            "number_of_shards":"1",
            "provided_name":"tutorial",
            "creation_date":"1652405360958",
            "number_of_replicas":"1",
            "uuid":"OuynpaOiRyqQ1sj-b2xuYw",
            "version":{
               "created":"7170399"
            }
         }
      }
   }
}

您的 @timestamp 字段映射不正确,因为 text/keyword 字段类型不适合日期值。您需要将映射更改为此:

        "@timestamp":{
           "type":"date"
        },

然后您将能够 运行 您在 @timestamp

上的 range 查询