Мы используем эластичность 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"]
}
}
}
}
}
}
}