Это работает для меня правильно:
search = Search(using=client, index='my_index').script_fields(
special={'script': {
'source': "<a formula that produces a double>"}
}
)
И теперь я хочу прикрепить сумму к полю special
по всем попаданиям.Я попробовал это:
search = Search(using=client, index='my_index').script_fields(
special={'script': {
'source': "<a formula that produces a double>"}
}
).aggs.metric('total', 'sum', field='special')
Но когда я проверяю атрибут aggs
ответа, я получаю
{'total': {'value': 0.0}}
Сам ответ говорит мне, что special
заполнен правильно длякаждая запись, и это всегда позитивно.Мне кажется, что special
может отсутствовать в тот момент, когда возникает сумма, так что эластичный поиск не видит ее, и поэтому он составляет сумму 0
.Я экспериментировал с pipeline
вместо metric
, но это ничего не изменило.То, что я предлагаю, должно быть возможным, верно?
Я мог бы сделать сумму в моем сценарии, а не черезasticsearch, но я держу пари, что сумма на стороне ES будет намного быстрее.
Обновление
На основании этого обсуждения на форумеasticsearch Я думаю, что нашел способ, которым он должен работать, но он все еще не работает должным образом для меня.Вы предоставляете сценарий внутри агрегации следующим образом:
s=Search(using=client, index='my_index').aggs.pipeline('total', 'sum', script={'source': "<the special formula>"})
Проблема теперь в том, что выходные данные не верны.В тестовом индексе с одним элементом заданного времени я попытался сообщить об этом поле в агрегации сумм, и вместо ожидаемого результата (значения поля) я получил нечто, отличающееся на 128.
Обновление
Я получил ответ на эту последнюю проблему на справочном форумеasticsearch: https://discuss.elastic.co/t/script-aggregation-yields-wrong-but-close-answer/133744/3?u=rschwieb
В двух словах, данные, хранящиеся в поле, были интерпретированы как двойныеasticsearch, но при агрегации использовался тип, определенный отображением для индекса (вместо этого было указано «float»).После повторной индексации поля в виде двойного числа числа соответствуют ожидаемым.