Добрый день.
Есть элементы с двумя дочерними элементами (тип join).
Необходимо сделать агрегацию по минимальному значению child_value для answer2. И, если answer2 отсутствует для родителя, то вместо него использовать answer1.
Пример:
PUT my_index/_doc/1?refresh
{
"text": "This is a question",
"my_join_field": {
"name": "question"
}
}
PUT my_index/_doc/2?refresh
{
"text": "This is a question 2",
"my_join_field": {
"name": "question"
}
}
Если надо все в одном флаконе, то вот такое безобразие должно работать. Ответ в final_answer. fake_top_level добавлен из-за https://github.com/elastic/elasticsearch/issues/14600 без верхнего уровня bucket_script работать не будет.
К сожалению первый вариант возвращает меньшее из всех, а мне требуется меньше из answer2 (а если для родителя нет answer2, то для этого родителя брать answer1). Если переводить в SQL, то примерно вот такое:
SELECT MIN( IF(answer2.child_value IS NOT NULL, answer2.child_value, answer1.child_value) )
FROM doc
LEFT JOIN answer2 ON answer2.parent = doc.id
LEFT JOIN answer1 ON answer1.parent = doc.id
Да, все заработало, спасибо большое! С первого раза не срабатывало из-за ошибки данных.
Может быть еще подскажите, отфильтровать родителей по таким же "пустым" дочерним элементам возможно?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.