4

在这里学习一些弹性搜索,我对在脚本字段定义中使用 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 参考中,我认为如果它们不可用会有点愚蠢。我一直在寻找“无痛最小最大功能”的组合,但我得到的只是我上面链接的内容和一堆不相关的东西。

我在这里做错了什么?

4

1 回答 1

5

我终于偶然发现了答案。我一直在根据我找到的一个示例使用转义引号,并且用单引号替换它们会导致我收到错误消息,从而使我进入我的工作版本。我犯的另一个错误是没有使用.valueondoc['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 是为了更灵活。

于 2018-05-25T14:31:07.777 回答