У меня есть вложенный тип данных, в котором я хотел бы сделать расчет внутри их внутренних объектов. Я в основном хочу, чтобы мой поиск возвращал попадания, если они удовлетворяют условиям в двух внутренних объектах, сложным условием является получение их соответствующих значений меток времени как часть запроса и использовать их для генерации хитов, учитывая желаемую разницу во времени между ними
Возьмем этот единственный документ, например:
{
"messages": [
[
{
"message": "First message",
"timeStamp": "0:00:00"
},
{
"message": "Second message",
"timeStamp": "0:10:00"
},
{
"message": "Third message",
"timeStamp": "0:15:00"
},
{
"message": "Fourth message",
"timeStamp": "0:30:00"
},
{
"message": "Fifth message",
"timeStamp": "1:00:00"
}
]
]
}
Я бы хотел, чтобы мой удар был возвращен, если сообщение содержит текст Second
и текст Third
для другого внутреннего объекта. находится в пределах 5 минут друг от друга. Я легко могу выполнить этот запрос, если я добавлю их метки времени непосредственно как часть запроса, но этот запрос должен работать с другими данными метки времени.
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"nested": {
"path": "messages",
"query": {
"bool": {
"must": [
{
"match": {
"messages.message": "Second"
}
},
{
"match": {
"messages.timeStamp": "0:10:00" <-- Start timeStamp depends on my data, consider this as a variable X to be used below
}
}
]
}
}
}
},
{
"nested": {
"path": "messages",
"query": {
"bool": {
"must": [
{
"match": {
"messages.message": "Third"
}
},
{
"range": {
"messages.timeStamp": {
"gte": "0:10:00", <-- Variable X mentioned above
"lte": "0:15:00" <-- I can't know end timeStamp, can only know it's a 5 minute range
}
}
}
]
}
}
}
}
]
}
}
]
}
}
}
Я исследовал использование результата как части подзапроса, старые ответы в предыдущих версиях говорят, что это невозможно, и не смогли выполнить его с помощью script_fields или inner_hits Я также рассмотрел запрос пространственных объектов, но похоже, что мне все равно нужно указать источник в качестве части запроса, и я не уверен, что это на самом деле решает мою проблему.
Кто-нибудь знает, есть ли реальный способ достичь этого ?? Спасибо!