我正在尝试在Kibana DevTools中编写一个查询,该查询将为我每个查询提供一个匹配项。假设我有要与特定值匹配的字段(field1,field2)。
如果要为这些字段中的任何一个找到任何日志,我想为每个字段显示1个结果。我现在正在使用的显示1搜索1日志的代码如下:
(我正在寻找在最近30分钟内创建的日志,并使用sort来获取最后一个日志)
GET default*/_search
{
"size": 1,
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "field1:somevalue*"}
},
{
"range":{"@timestamp":{"gte": "now-30m"}}
}
]
}
},
"sort" :{
"@timestamp":{
"order":"desc"
}
}
}
如何修改它以为每个字段(field1,field2)显示1个日志。应该看起来像这样:
GET default*/_search
{
"size": 1,
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "field1:somevalue*"}
},
{
"range":{"@timestamp":{"gte": "now-30m"}}
}
]
}
},
"sort" :{
"@timestamp":{
"order":"desc"
}
}
}
AND
{
"size": 1,
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "field2:somevalue*"}
},
{
"range":{"@timestamp":{"gte": "now-30m"}}
}
]
}
},
"sort" :{
"@timestamp":{
"order":"desc"
}
}
}
上面的那个显然不起作用,但想形象化我的意思。感谢任何帮助
我建议使用multi search API:
GET default*/_msearch
{}
{"size":1,"query":{"bool":{"must":[{"query_string":{"query":"field1:somevalue*"}},{"range":{"@timestamp":{"gte":"now-30m"}}}]}},"sort":{"@timestamp":{"order":"desc"}}}
{}
{"size":1,"query":{"bool":{"must":[{"query_string":{"query":"field2:somevalue*"}},{"range":{"@timestamp":{"gte":"now-30m"}}}]}},"sort":{"@timestamp":{"order":"desc"}}}
在响应中,您将得到您所期望的,即每个查询的响应。