Reputation: 1058
I have a query (well a part of it - rest is unimportant like pagination):
"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
}
}
]
}
}
}
}
It's for searching profile, which has a skill "PHP" with value 2 or more. User can search for multiple skills=>values pair. It's working fine, but I have one question:
How to make a little boost for matched skills which has higher skills.value, just to make person with PHP value 3 be higher in search results than someone with PHP 2 even if both are correct match.
Upvotes: 12
Views: 2268
Reputation: 217254
I suggest using function_score
to do this and more specifically the field_value_factor
function which allows to use a field value in the scoring computation (with an optional factor by which to multiply the field value):
{
"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
}
}
]
}
}
}
}
]
}
}
}
}
}
Upvotes: 2