Как вы используете мин / макс в встроенных скриптах ElasticSearch? - PullRequest
0 голосов
/ 25 мая 2018

Изучая здесь несколько элементов поиска, и я немного озадачен использованием функций min и max в определениях полей в сценариях.Во-первых,

GET my_index/_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "source": "min(doc[\"this field\"],5)"
            }
        }
    }
}

И я награжден

"error": {
"root_cause": [
  {
    "type": "script_exception",
    "reason": "compile error",
    "script_stack": [
      "min(doc[\"end\"],5)",
      "^---- HERE"
    ],
    "script": "min(doc[\"end\"],5)",
    "lang": "painless"
  }
], ...

Я подумал, может быть, мне нужно было присвоить ему пространство имен с Long.min и получил обратно

"reason": "runtime error",
      "script_stack": [
        """Long.min(doc["end"],5)""",
        "            ^---- HERE"
      ],

ЭтоКажется, что это прогресс, но почему проблема была бы doc?

Они, кажется, в справочнике безболезненно API , и я думаю, что было бы немного идиотским, если бы они не были доступны,Я продолжаю искать комбинации «безболезненной функции min max», но все, что я получаю, это то, что я связал выше, и суп из несвязанных вещей.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 25 мая 2018

Я наконец наткнулся на ответ.Я использовал экранированные кавычки, основанные на найденном примере, и замена их на одинарные кавычки привела меня к сообщениям об ошибках, которые привели меня к моей рабочей версии.Еще одна ошибка, которую я сделал, заключалась в том, что я не использовал .value на doc['this field'] для восстановления фактического числового типа.Рабочая версия:

GET my_index/_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "source": "Math.min(doc['this field'].value,5)"
            }
        }
    }
}

Double.min (соответствует типу 'этого поля') тоже работал, но я понимаю, что Math.min должен быть более гибким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...