Пользовательская функция оценки elasticsearch script_score: как заменить отсутствующие значения?

Я просматриваю документацию elasticsearch о том, как создать сценарий для пользовательской функции оценки, которая использует поля, которые не запрашиваются для оценки, по адресу эта ссылка.

Из того, что я вижу, вы создаете функцию сценария следующим образом:

"script_score" : {
    "script" : {
      "lang": "painless",
      "inline": "_score * doc['my_numeric_field'].value"
    }
}

но мне интересно, какой синтаксис для замены doc['my_numeric_field'].value, если он отсутствует?


person user3494047    schedule 31.03.2017    source источник
comment
вы можете установить нулевую проверку для этого поля в скрипте doc['my_numeric_field'].value   -  person user3775217    schedule 01.04.2017
comment
Да, это то, что я делаю, хотя я не нашел отличной документации о том, что я могу здесь сделать.   -  person user3494047    schedule 03.04.2017
comment
@user3775217 user3775217 Как сделать нулевую проверку? Я получаю некоторые ошибки, такие как cannot convert MethodHandle(Doubles)double to (Object)boolean, когда пытаюсь использовать тернарные операторы float_can_be_null ? float : some_default   -  person Cyril Duchon-Doris    schedule 23.03.2018


Ответы (2)


У меня сработало следующее (моя версия 6.2.4):

          "script_score" : {
            "script" : {
              "source": "doc.containsKey('my_numeric_field') ? doc['my_numeric_field'].value : 0"
            }
        },

Нашел по адресу:

https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-fields.html

person Stefan Ocke    schedule 29.05.2018

Вопрос старый, но, возможно, мой ответ будет кому-то полезен.

Вы должны использовать размер, чтобы чтобы проверить, отсутствует ли значение:

doc['field'].size() == 0
person rkm    schedule 26.09.2018