【问题标题】:Elasticsearch - Using groovy script within function_score and access field payloadElasticsearch - 在 function_score 中使用 groovy 脚本并访问字段有效负载
【发布时间】:2015-09-06 15:29:34
【问题描述】:

我试图了解在使用 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”的所有有效负载的列表,这不是我想要的。

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

【问题讨论】:

    标签: groovy elasticsearch


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

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

      Groovy 在这里提供了一个不错的单行代码:

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

      【讨论】:

      • 其实想想也没有解决我的问题..:-| _index 让我可以访问索引范围内的统计信息,而不是特定文档。我想继续处理每个文档,并获取其有效负载并将其与一些常数相乘。执行此操作时: _index['category'].get('term', _PAYLOADS) 我将获得“term”的所有有效负载的列表,这不是我想要的。你怎么看?如何从文档范围而不是索引访问文档的有效负载?
      • 嗯,让我考虑一下。同时,您应该更新您的问题,以根据您刚刚评论的内容澄清您的期望。
      • 你有什么想法吗? @Val
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多