ElasticSearch轻松编写脚本-除了最终得分以外,还可以输出变量值的方法吗?

时间:2019-07-15 00:57:26

标签: elasticsearch elasticsearch-painless

我在查询ES索引时使用了一种轻松的脚本来实现自定义评分功能,这被用作我们推荐引擎的基础。在无痛脚本中计算最终分数时,我使用在无痛脚本中计算的中间变量(如新近度和唯一性)的乘积。

现在,获得顶级文档的最终分数很简单,因为它们在查询响应中返回。但是,为了进行详细的分析,我试图找到一种方法来获取中间变量的值(如上例中的新近度和唯一性)。我知道这些无痛变量仅存在于无痛脚本的上下文中,该脚本没有标准的REPL设置。那么,真的没有办法访问这些无痛的变量吗?有没有人找到解决方法来做到这一点?谢谢!

例如如果我有以下简化的简化脚本:

def recency = 1/doc['date'].value
def uniqueness = doc['ctr].value

return recency * uniqueness

在最终的ES响应中,我得到了分数,即recency * uniqueness。但是,我也想知道什么是中间变量,即recencyuniqueness

1 个答案:

答案 0 :(得分:0)

您可以尝试对多个脚本字段使用模块化方法,例如:

  1. 新近度-获取新近度字段
  2. 唯一性-获取唯一性字段

  3. 像访问最终ES脚本中的普通ES字段一样访问这些字段

if(doc.containsKey('recency.keyword') && doc.containsKey('uniqueness.keyword'))
{
  def val1 = doc['recency.keyword'].value;
  def val2 = doc['uniqueness.keyword'].value;
}

希望有帮助