#elasticsearch #logstash #aggregation #elasticsearch-aggregation #elk
#elasticsearch #logstash #агрегирование #elasticsearch-агрегирование #elk
Вопрос:
У меня есть индекс, который содержит события из разных источников, поэтому у меня есть два разных имени для одного и того же поля: «accounting_date» и «dt_comptable«, и мне нужно запросить и получить максимальное из двух значений поля, следующий запрос сработал для меня для одного поля:
GET indexXX/_search
{
"size": 0,
"aggs": {
"latest_accounting_date": {
"max": {
"field": "dt_comptable"
}
}
}
}
Мне нужно включить другое поле «accounting_date«.
Комментарии:
1. Вам нужно получить максимальное количество двух полей для идентификатора документа?
2. @AssaelAzran нет, мне нужна максимальная дата между всеми документами, но с использованием двух полей, потому что в каждом документе есть одно из них
Ответ №1:
Введите сценарий… Вместо указания поля вы можете указать скрипт, который будет извлекать любое поле, какое бы оно ни присутствовало, но max
агрегация сможет работать с ними обоими:
GET indexXX/_search
{
"size": 0,
"aggs": {
"latest_accounting_date": {
"max": {
"script": {
"source": "doc['dt_comptable'].size() > 0 ? doc['dt_comptable'].value : doc['accounting_date'].value"
}
}
}
}
}
Комментарии:
1. Спасибо за ваш ответ, вы дали мне хорошую наводку, я обновил ваш ответ, потому что у меня есть несколько документов без значений, это работает нормально, но я больше не могу получить значение в виде строки, вместо этого я получаю результат с таким же длинным типом: «агрегации»: { «latest_accounting_date»: { «значение»: 1.5943392E12 } }
2. Должно быть, раньше было то же самое, максимальная агрегация возвращает вам длинное значение самой последней даты, а не строку. Это длинное значение представляет собой количество миллисекунд, прошедших с момента начала эпохи, поэтому его легко преобразовать обратно в строку даты, если вам нужно.
3. Под строкой я подразумевал «value_as_string», которое я получаю при использовании simple max с полем: «aggregations»: { «latest_accounting_date» : { «value»: 1.5943392E12, «value_as_string»: «2020-07-10» } } Но, как вы сказали, я все равно могу преобразовать длинное значение в дату, так что большое вам спасибо