我在查询ES索引时使用了一种轻松的脚本来实现自定义评分功能,这被用作我们推荐引擎的基础。在无痛脚本中计算最终分数时,我使用在无痛脚本中计算的中间变量(如新近度和唯一性)的乘积。
现在,获得顶级文档的最终分数很简单,因为它们在查询响应中返回。但是,为了进行详细的分析,我试图找到一种方法来获取中间变量的值(如上例中的新近度和唯一性)。我知道这些无痛变量仅存在于无痛脚本的上下文中,该脚本没有标准的REPL设置。那么,真的没有办法访问这些无痛的变量吗?有没有人找到解决方法来做到这一点?谢谢!
例如如果我有以下简化的简化脚本:
def recency = 1/doc['date'].value
def uniqueness = doc['ctr].value
return recency * uniqueness
在最终的ES响应中,我得到了分数,即recency * uniqueness
。但是,我也想知道什么是中间变量,即recency
和uniqueness
答案 0 :(得分:0)
您可以尝试对多个脚本字段使用模块化方法,例如:
唯一性-获取唯一性字段
像访问最终ES脚本中的普通ES字段一样访问这些字段
if(doc.containsKey('recency.keyword') && doc.containsKey('uniqueness.keyword'))
{
def val1 = doc['recency.keyword'].value;
def val2 = doc['uniqueness.keyword'].value;
}
希望有帮助