我们使用elasticsearch和kibana来查询日志。
elasticsearch中接收的数据格式如下:
{
"took" : 84,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5719,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "evtdata-2020-11",
"_type" : "_doc",
"_id" : "49612101596783840103434103604261455601292612965391925250.0",
"_score" : 1.0,
"_source" : {
"id" : "unknown:B8-27-EB-47-B4-2A",
"timestamp" : 1604453736242,
"data" : [
{
"e" : "A",
"v" : 15.0
},
{
"e" : "B",
"v" : 30.22
},
{
"s" : "A",
"v" : 1.4
},
{
"s" : "B",
"v" : 310
}, {
"s" : "C",
"v" : 2
}
],
"drift" : -3.0
}
}
}
}
我们只想得到值e=a在特定时间范围内的数据索引。
"data" : [
{
"e" : "A",
"v" : 15.0
}
]
目前我建立的查询是:
GET /evtdata-2020-11/_search
{
"_source": [
"data.e",
"data.v"
],
"query": {
"bool": {
"must": [
"inner",
{
"match": {
"data.e": "A"
}
},
{
"range": {
"timestamp": {
"gte": 1604453773434,
"lt": 1604453778451
}
}
}
]
}
}
}
但是通过上面的查询,我得到了所有的e和v。有人能告诉我如何改变查询,只得到resposne中类型a的e和v吗?
1条答案
按热度按时间qco9c6ql1#
不能独立于数组中的其他对象来查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。
然后,您可以使用基于嵌套内部对象中的匹配项返回文档的内部\u命中
索引Map:
搜索查询:
搜索结果: