Как найти отдельные значения одного поля на основе диапазона дат?Elasticsearch 6.3 - PullRequest
0 голосов
/ 03 мая 2019

У меня есть поле cid, для которого мне нужно найти различные значения. Но я хочу те cid, которые удовлетворяют моему ограничению диапазона дат. Я хочу сказать, что я хочу, чтобы отдельные cid были добавлены в мою базу данных Elasticsearch за указанный промежуток времени.

Я перепробовал много подходов, большинство из них просто возвращают все значения и не агрегируют.

{
    "aggs": {
        "daterange": {
            "range": {
                "field": "@timestamp",
                "ranges": [
                        {"from": "2019-05-02", "to": "2019-05-03"}
                    ]
            },
            "aggs": {
                "result": {
                    "terms": {
                        "field": "cid.keyword"
                    }
                }
            }
        }
    },
    "_source":"cid"
}

Я ожидаю, что различные значения cid, но я получаю все значения, которые соответствуют временному диапазону.

Обновление:

Ответ Val работает после изменения моего URL с /index/search?size=100 на /index/search

1 Ответ

3 голосов
/ 03 мая 2019

Вам нужно сделать это следующим образом, то есть добавить дату range в качестве запроса, чтобы уменьшить набор документов, а затем выполнить агрегацию terms только для документов, попадающих в этот диапазон дат:

{
  "size": 0,
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2019-05-02",
        "lt": "2019-05-03"
      }
    }
  },
  "aggs": {
    "result": {
      "terms": {
        "field": "cid.keyword"
      }
    }
  }
}
...