首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹性搜索。基于doc字段的动态评分

弹性搜索。基于doc字段的动态评分
EN

Stack Overflow用户
提问于 2018-10-09 07:45:09
回答 1查看 266关注 0票数 0

嗨,我正在使用ElasticSearch6.4,我试图为我的问题找到任何可行的解决方案。因此,我的问题是,我有医生,我试图得分取决于id从查询。简化的文档结构如下所示:

代码语言:javascript
运行
复制
{
    "rates": [
     { "id": 1, "score_rate": 4.0},
     { "id": 2, "score_rate": 5.0}, 
     { "id": 3, "score_rate": 0.0}
   ]
}

rates字段是嵌套的。

  1. 在我的第一次尝试中,我根据查询script_score函数来实现这个目标: {“script_score”:{“脚本”:{“params”:{“id”:1,"min":0.0},“id”:“secondary_rate”}

secondary_rate是无痛脚本的地方

代码语言:javascript
运行
复制
double min_threshold = (double) params.min;
double score = min_threshold;

for (int i = 0; i < params._source.rates.length; ++i){
     def rate = params._source.rates[i];
     if (rate.id == params.id){
        c_score = category.score_rate;
        break;
}
}
return c_score;

但是这不起作用,因为嵌套字段不能在脚本中访问整个doc['rates'],而_source字段在script_functions中不再可用(https://discuss.elastic.co/t/painless-null-pointer-exception/128245)。

  1. 在第二次尝试中,我尝试使用NestedQuery和FieldValueFactor的组合,类似于https://discuss.elastic.co/t/nested-value-on-function-score/29935/2。但不幸的是,NestedQuery使用根查询对其进行第二次查询和连接(我无法控制如何执行连接)结果,如果根查询是空的,则NestedQuery的结果只是添加到根结果中。这种行为在我的业务逻辑中是不可接受的。
  2. 在第三次尝试中,我尝试将rates字段重新索引为数组,并在其中编码关于id的信息。因此,上面示例中的字段如下所示:{ "rates": [0, 4.0, 5.0, 0.0]} 我再次使用了脚本函数,但不能保证元素的顺序(来自被认为是“值袋”的官方弹性搜索文档数组)。要使元素的顺序与索引时间相同,我需要使用_source字段(在6.4中不可用)。

所以我被困在这个问题上,不知道如何解决它。因此,任何建议或暗示都是非常欢迎的。提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 13:00:42

如果你知道如何使它正常工作,请把它写在评论中。但就我所知,我创造了解决办法:

因为速率数组的大小相对较小。我设法动态地为每个值创建了Float字段,然后在搜索时间内,我将这些字段的名称作为参数传递给我的script_score (参数rates_keys),并只对值进行求和。所以无痛的功能看上去就像:

代码语言:javascript
运行
复制
double add_score = 0.0;
String key;
for (int i = 0; i != params.rates_keys.length; ++i){
    rate_key = params.rates_keys[i];
    if(!doc[rate_key].empty) add_score += doc[rate_key].value;
}
return add_score;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52715775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档