Агрегация Elasti c для временной шкалы искомого поля на основе метки времени - PullRequest
0 голосов
/ 06 мая 2020

Мы используем эластичность c версия: 6.8

Мне нужна помощь с образцом запроса, который может решить приведенный ниже вариант использования.

Примеры данных:

У нас есть Указатель книг, который может путешествовать, в какой зоне была книга и когда.

{'zone': 'z1', book: 'book1', timestamp: '01/01/2020'}
{'zone': 'z1', book: 'book1', timestamp: '03/01/2020'}
{'zone': 'z2', book: 'book1', timestamp: '04/01/2020'}
{'zone': 'z2', book: 'book1', timestamp: '05/01/2020'}
{'zone': 'z2', book: 'book1', timestamp: '10/01/2020'}
{'zone': 'z2', book: 'book1', timestamp: '12/01/2020'}
{'zone': 'z1', book: 'book1', timestamp: '15/01/2020'}
{'zone': 'z1', book: 'book1', timestamp: '16/01/2020'}
{'zone': 'z1', book: 'book1', timestamp: '20/01/2020'}

Мне нужен запрос, который может возвращать полное путешествие книги по зонам, в то время как книга перемещается туда и обратно по зонам.

Ожидаемый результат при запросе book1:

[ 
    {
        zone: 'z1'
        start: '01/01/2020'
        end: '04/01/2020'
    },
    {
        zone: 'z2'
        start: '05/03/2020'
        end: '12/01/2020'
    },
    {
        zone: 'z1'
        start: '15/03/2020'
        end: '20/01/2020'
    }
]

Это то, что я придумал до сих пор:

GET /book/_search
{
  "query": {
      "bool": {
          "must": [
              {
                  "match": {
                      "book": "book1"
                  }
              }
          ]
      }
  },
  "size": 0,
  "aggs": {
        "zoneList": {
          "terms": {
            "field": "zone",
            "size": 1000
        },
        "aggs": {
          "first_seen": {
           "top_hits": {
              "size": 1,
              "sort": [
                 {
                    "timestamp": {
                       "order": "asc"
                    }
                 }
              ],
              "_source": {
                  "includes": ["timestamp"]
                }
              }
          },
          "last_seen": {
             "top_hits": {
                "size": 1,
                "sort": [
                   {
                      "timestamp": {
                         "order": "desc"
                      }
                   }
                ],
                "_source": {
                  "includes": ["timestamp"]
                }
             }
          }  
        }
      }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...