【问题标题】:Elastic Search. Dynamic scoring based on doc field弹性搜索。基于文档字段的动态评分
【发布时间】:2018-10-12 21:00:42
【问题描述】:

您好,我使用的是 elasticsearch 6.4,我正在尝试为我的问题找到任何可行的解决方案。所以我的问题是我有文档,我试图根据查询中的 id 进行评分。简化的文档结构如下:

{
    "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":{"script":{"params":{"id":1,"min":0.0},"id":"secondary_rate"}}}
    

secondary_rate 是无痛脚本

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 的脚本中无法访问嵌套字段,并且脚本函数中的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]}

    我再次使用了脚本函数,但不能保证元素的顺序(来自被视为“值袋”的官方 Elastic Search 文档数组)。要有元素在 与索引时间相同的顺序我需要使用_source 字段(在 6.4 中不可用)。

所以我有点卡在这个问题上,不知道如何解决它。因此,非常欢迎任何建议或提示。提前谢谢你

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您知道如何使其正常工作,请将其写在 cmets 中。 但要知道我创建了解决方法:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 2018-11-03
      • 2017-11-26
      • 1970-01-01
      • 2017-11-30
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多