我有一个查询(很好的一部分 - 休息不像分页那样重要):
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"is_active": true
}
}
],
"should": [
{
"bool": {
"must": [
{
"nested": {
"path": "skills",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"range": {
"skills.value": {
"gte": "2"
}
}
},
{
"term": {
"skills.skill.name": "php"
}
}
]
}
}
]
}
}
}
}
],
"boost": 2
}
}
]
}
}
}
}
用于搜索个人资料,其具有技能" PHP"值2或更多。用户可以搜索多个技能=>值对。 它工作正常,但我有一个问题:
如何对具有更高技能的匹配技能进行一点推动。值得,只是为了让PHP值为3的人在搜索结果中比使用PHP 2的人更高,即使两者都匹配正确。
答案 0 :(得分:2)
我建议使用function_score
来执行此操作,更具体地说,field_value_factor
function允许在评分计算中使用字段值(使用可选因子乘以字段值):
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"is_active": true
}
}
],
"should": [
{
"nested": {
"path": "skills",
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"range": {
"skills.value": {
"gte": "2"
}
}
},
{
"term": {
"skills.skill.name": "php"
}
}
]
}
},
"functions": [
{
"field_value_factor": {
"field": "skills.value",
"factor": 2
}
}
]
}
}
}
}
]
}
}
}
}
}