我正在尝试构建一个查询,返回一个包含相关分数的概要文件列表。完整查询由许多子查询组成。
每个子查询都会向概要文件询问一个问题,如“员工总数是否>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"
}
}
}
暂无答案!
目前还没有任何答案,快来回答吧!