在elasticsearch中为每场比赛获取n条记录

时间:2019-04-04 09:23:02

标签: elasticsearch

我有一个弹性查询,如下所示:

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.advertiserId16951252的文档。在@timestamp上使用过滤器。

结果中包含hits个存储桶,其中包含10个结果,其中包含一些带有1695的结果和一些带有1252的结果的组合。我要实现的是,每个指定的20需要n(任何指定的Request.advertiserId)文档。换句话说,20 documents的{​​{1}}和1695的{​​{1}}。只需1个弹性查询就可以实现吗?

到目前为止,我可以想到的是对每个20进行不同的查询并指定1252(这可以是变量Request.advertiserId)。但随后,我将不得不针对size=20n个数字发起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小时),而不是整个月?

1 个答案:

答案 0 :(得分:2)

我认为你可以做到

use as source folder