在elasticsearch中实现加权自定义评分查询时,无法获得平均值

ikfrs5lh  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(0)|浏览(289)

我正在尝试构建一个查询,返回一个包含相关分数的概要文件列表。完整查询由许多子查询组成。
每个子查询都会向概要文件询问一个问题,如“员工总数是否>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"
                  }
               }

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题