我有一个弹性查询,如下所示:
GET /logs-of-year-2019.03.*/_search
{
"sort": [
{
"@timestamp": "desc"
}
],
"query": {
"bool": {
"must": [
{
"terms": {
"Request.advertiserId": [1695, 1252]
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"gte": "now-5h/d",
"lte": "now/d"
}
}
}
]
}
}
}
此查询获取所有Request.advertiserId
为1695
或1252
的文档。在@timestamp
上使用过滤器。
结果中包含hits
个存储桶,其中包含10
个结果,其中包含一些带有1695
的结果和一些带有1252
的结果的组合。我要实现的是,每个指定的20
需要n
(任何指定的Request.advertiserId
)文档。换句话说,20 documents
的{{1}}和1695
的{{1}}。只需1个弹性查询就可以实现吗?
到目前为止,我可以想到的是对每个20
进行不同的查询并指定1252
(这可以是变量Request.advertiserId
)。但随后,我将不得不针对size=20
个n
个数字发起m
个查询。可以在1个单一查询中实现吗?
PS:m
上面的行指出,需要扫描指定月份所有日期的日志。索引存储为Request.advertiserId
(日志记录为GET /logs-of-year-2019.03.*/_search
小时(2019年3月1日),logs-of-year-2019.03.01-05
(日志记录为5th
小时为2019年3月1日),依此类推。日志每天每小时创建一次。是否可以对上述行进行优化,使其从logs-of-year-2019.03.01-06
起仅检查索引5个小时(可以涉及前一天,因为搜索可以在晚上0100进行。因此,它应该比以前的日期花费21到00个小时,并且今天的日期是00到01小时),而不是整个月?
答案 0 :(得分:2)
我认为你可以做到
use as source folder