除非使用关键字,否则按时间戳范围查询不起作用
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"
}
并且我正在尝试通过以下请求查找 @timestamp
在 2022-05-16T09:30:00
和 2022-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
查询
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"
}
并且我正在尝试通过以下请求查找 @timestamp
在 2022-05-16T09:30:00
和 2022-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
查询