我的文档中有一个嵌套对象mygroup
,如下所示:
{
"name": "john",
"mygroup": [
{
"start": 200,
"end": 490
},
{
"start": 800,
"end": 900
},
{
"start": 22,
"end": 49
}
]
}
script_score
我的其中一个function_score
如下:
"script_score": {
"params": {
"gboost": -1350,
"desired": 30,
"delta": 10
},
"script": "_source['mygroup'].values.any{ if(it -> it.end >= desired && it.start <= desired) { return (it.end - delta) * 2} };"
}
在这里,我的目标是找到一个符合我的条件的对象,其中start
>= 期望 AND end
<= 期望(总是只有一个对象可以满足这个条件,这在我的数据存储中得到保证),一旦我找到那个对象,我就会想回来(it.end - delta) * 2
计算分数
我上面的脚本"_source['mygroup'].values.any{ if(it -> it.end >= desired && it.start <= desired) { return (it.end - delta) * 2} };"
不工作,它不断抛出错误。我正在使用 ES 2.3 和 groovy 编写脚本语言。
如果我doc['mygroup']
在 的地方使用_source['mygroup']
,那也无济于事