Отфильтровать пустые поля

Я использую карту / уменьшить функциональность с безболезненным языком, чтобы сделать некоторые агрегации.

В части 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 вместо.

Другие вопросы по тегам