Отфильтровать пустые поля
Я использую карту / уменьшить функциональность с безболезненным языком, чтобы сделать некоторые агрегации.
В части map_script я пытаюсь отфильтровать все документы, для которых определенное поле имеет значение null, но я не могу этого сделать.
Я пытался сделать containsKey()
а также != null
но выражение оценивается как истинное для каждого документа, хотя я смотрю на базовые данные, и в подавляющем большинстве документов это поле установлено в нуль.
Я не могу объяснить это, но он ведет себя так, как значение этого поля для почти каждого документа, как 0, а не как ноль, здесь, когда я его агрегирую. Но это не тот случай, потому что, когда я делаю запрос этого поля, я вижу кучу нулей.
{
"aggs": {
"my_agg_name": {
"scripted_metric": {
"combine_script": "... combine script ...",
"map_script": "if (doc.containsKey(\"my_field\") && doc.my_field.value != null) { ... } }",
"init_script": "... init script ...",
"reduce_script": "... reduce script ..."
}
}
},
"size": 0
}
У кого-нибудь есть идея, что происходит? Как отфильтровать нули на карте / уменьшить агрегацию безболезненно?
1 ответ
Я понял это. doc.my_field.value
по-видимому, преобразует нулевое значение в 0.
То, что работал, использует !doc.my_field.empty
вместо.