Я ломал голову над тем, как это сделать, но не могу найти решение. Надеюсь, стек поможет.
У меня есть ситуация, когда идентификатор (назовем его идентификатором объекта - OID):
1) Используется для отслеживания цепочки транзакций;
2) Не гарантируется быть уникальным вне 5-минутного интервала.
На английском языке «Я хочу получить все документы, которые: (имеют oid1 с данными между временем x и y) ИЛИ (имеют oid2 с данными между временем w и z) ИЛИ ...»
Поскольку я имею дело с большим количеством данных (и хочу избежать выполнения 1 запроса на OID), я хотел бы получить список OID, установить ограничение по времени для каждого из них, а затем запросить ES в один раз. Я думал, что смогу сделать это:
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"oid": "12ac419512ac4195"
},
"range": {
"startTime": {
"from": "2019-01-04T21:31:00.000Z",
"to": "2019-01-04T21:34:00.000Z"
}
}
},
{
"match_phrase": {
"oid": "34df261834df2618"
},
"range": {
"startTime": {
"from": "2019-01-04T21:35:00.000Z",
"to": "2019-01-04T21:40:00.000Z"
}
}
}
],
"minimum_should_match": 1
}
}
}
Это работает нормально, пока я убираю время («Я хочу получить oid1 или oid2 или oid2»), но с временным диапазоном, похоже, ES не радует.
Есть ли способ сделать это? Или я придерживаюсь одного запроса на OID.