在这里学习一些弹性搜索,我对在脚本字段定义中使用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
?
它们似乎出现在painless API reference中,我认为如果没有它们会有点愚蠢。我一直在寻找“无痛最小最大功能”的组合,但我得到的就是我上面提到的和一些不相关的东西。
我在这里做错了什么?
答案 0 :(得分:1)
我终于偶然发现了答案。我一直在使用基于我找到的示例的转义引号,并用单引号替换它们导致我收到错误消息,这些消息让我进入了我的工作版本。我犯的另一个错误是没有使用.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意味着更灵活。