在弹性搜索中实施加权自定义评分查询时未获得平均值

时间:2015-05-22 14:32:30

标签: elasticsearch filter nest scoring

我正在尝试构建一个返回配置文件列表及其相关分数的查询。完整查询由许多子查询组成。

每个子查询都会询问个人资料,例如“是人数”等问题。 50' 。我想要以下行为

  • 如果存在且在范围内,则返回得分1
  • 如果存在且不在范围内,则不会返回
  • 如果缺少
  • ,则返回得分为0。

然后我想取所有子查询分数的平均值来给我查询分数。显然,如果存在任何查询字段且超出范围,则不会返回。

我尝试这样做的方法是使用功能评分查询。这是一系列失败尝试的最后一次迭代:(。

返回正确的配置文件;但是得分始终为1.如果员工人数在范围内并且营业额不存在(比方说),我希望得分为0.5。

任何帮助都会受到如此多的赞赏,

谢谢,

帕斯卡。

POST /api_test/_search
{
"query": {
                  "function_score": {
                     "functions": [
                        {
                           "filter": {
                              "range": {
                                 "companyProps.headcount": {
                                    "lte": "1000",
                                    "gte": "5"
                                 }
                              }
                           },
                           "weight": 1
                        },
                        {
                           "filter": {
                              "missing": {
                                 "field": "companyProps.headcount"
                              }
                           },
                           "weight": 0
                        },
                        {
                           "filter": {
                              "range": {
                                 "companyProps.turnover": {
                                    "lte": "1000",
                                    "gte": "100"
                                 }
                              }
                           },
                           "weight": 1
                        },
                        {
                           "filter": {
                              "missing": {
                                 "field": "companyProps.turnover"
                              }
                           },
                           "weight": 0
                        }
                     ],
                     "query": {
                        "filtered": {
                           "query": {
                              "match_all": {}
                           },
                           "filter": {
                              "bool": {
                                 "must": [
                                    {
                                       "bool": {
                                          "should": [
                                             {
                                                "range": {
                                                   "companyProps.headcount": {
                                                      "lte": "1000",
                                                      "gte": "5"
                                                   }
                                                }
                                             },
                                             {
                                                "missing": {
                                                   "field": "companyProps.headcount"
                                                }
                                             }
                                          ]
                                       }
                                    },
                                    {
                                       "bool": {
                                          "should": [
                                             {
                                                "range": {
                                                   "companyProps.turnover": {
                                                      "lte": "1000",
                                                      "gte": "100"
                                                   }
                                                }
                                             },
                                             {
                                                "missing": {
                                                   "field": "companyProps.turnover"
                                                }
                                             }
                                          ]
                                       }
                                    }
                                 ]
                              }
                           }
                        }
                     },
                     "score_mode": "avg"
                  }
               }

}

0 个答案:

没有答案