Elasticsearch - 在function_score中使用groovy脚本并访问字段有效负载

时间:2015-09-01 20:10:18

标签: groovy elasticsearch

我试图了解在使用groovy脚本时访问有效负载的最佳方法是什么。

我想做这样的事情:

sum = 0;
categories  = doc['category'].values; 
for (category in categories){
   sum += category.payload
}
return sum;

修改: 感谢@Val和@Lee H,我到了这一点,我可以实际访问有效载荷。但建议的解决方案是使用_index,这不是我想要的,_index可以访问索引范围内的统计信息,而不是特定文档。

我想查看每个文档,并将其有效载荷乘以一些常量。

执行此操作时:_index ['category']。get('term',_ PAYLOADS)我将获得“term”的所有有效负载的列表,这不是我要找的。

那么有没有办法从文档范围访问字段有效负载?

2 个答案:

答案 0 :(得分:1)

查看相关文档 term positions and payloads 它显示了访问字段

的有效负载的示例

在此处复制最后一个示例:

Example: sums up all payloads for the term foo.

termInfo = _index['my_field'].get('foo',_PAYLOADS);
score = 0;
for (pos in termInfo) {
    score = score + pos.payloadAsInt(0);
}
return score;

答案 1 :(得分:1)

您可以使用advanced scripting_index上下文变量来实现此目的。

Groovy在这里帮助一个很好的单行:

return _index['category'].get('term', _PAYLOADS).sum {it.payloadAsInt(0)}