Hi,
I use a  filter on a nested object to check idf the document get a least
one value like this :
"custom_filters_score": {
 "query" : { "term" : { "entity_type_id": 1 } },
  "filters" : [
   {
     "filter" : {
       "bool" :
       {
         "should" : [
           { "term" : { "country_iso3": "usa" } }
         ]
       }
     },
     "boost" : 3.0
   },
    {
     "filter" : {
       "nested" :
       {
         "path" : "profile_type.profile_roles",
         "query" : {
           "filtered" : {
             "query": { "match_all": {}},
             "filter" :
             {
               "bool" :
               {
                 "must" :
                 [
                   {"terms": {"profile_type.profile_roles.role_id": [20,
23,5]}},
{"terms": {
"profile_type.profile_roles.skills.skill_id": [32,34,25,6,38]}}
]
}
}
}
}
}
},
"boost" : 2.0
}
  ],
 "score_mode" : "total"
}
Here "profile_roles" is a nested object containing an array of "roles"
It works great , but in my results some document match all
profile_type.profile_roles.role_id ( 20 , 23 and 5 ) and all
profile_type.profile_roles.skills.skill_id while some other match only one
role.
So i 'm looking for a way of giving a highest score to the document that
have more match , the one have 20 , 23 and 5 should have higher score than
the one who only have role_id 5.
Is there any solution for that ?
Thanks
--
             
            
              
              
              
            
            
           
          
            
            
              Hello Samuel,
If you want to have higher score on the role_id, you can specify a
boost for that terms query in particular. Something like:
"bool" : {
"must" : [
{
"terms": {
"profile_type.profile_roles.role_id": [20,23,5],
"boost" : 5.0
}
},
{"terms": {"profile_type.profile_roles.skills.skill_id":
[32,34,25,6,38]}}
]
}
Best regards,
Radu
http://sematext.com/ -- Elasticsearch -- Solr -- Lucene
On Wed, Oct 17, 2012 at 6:17 PM, samuel merlet samuel.merlet@gmail.com wrote:
Hi,
I use a  filter on a nested object to check idf the document get a least one
value like this :
"custom_filters_score": {
 "query" : { "term" : { "entity_type_id": 1 } },
  "filters" : [
   {
     "filter" : {
       "bool" :
       {
         "should" : [
           { "term" : { "country_iso3": "usa" } }
         ]
       }
     },
     "boost" : 3.0
   },
    {
     "filter" : {
       "nested" :
       {
         "path" : "profile_type.profile_roles",
         "query" : {
           "filtered" : {
             "query": { "match_all": {}},
             "filter" :
             {
               "bool" :
               {
                 "must" :
                 [
                   {"terms": {"profile_type.profile_roles.role_id":
[20,23,5]}},
{"terms":
{"profile_type.profile_roles.skills.skill_id": [32,34,25,6,38]}}
]
}
}
}
}
}
},
"boost" : 2.0
}
  ],
 "score_mode" : "total"
}
Here "profile_roles" is a nested object containing an array of "roles"
It works great , but in my results some document match all
profile_type.profile_roles.role_id ( 20 , 23 and 5 ) and all
profile_type.profile_roles.skills.skill_id while some other match only one
role.
So i 'm looking for a way of giving a highest score to the document that
have more match , the one have 20 , 23 and 5 should have higher score than
the one who only have role_id 5.
Is there any solution for that ?
Thanks
--
--
             
            
              
              
              
            
            
           
          
            
            
              Hi,
No this doesn't works, "terms" filter doesn't support boost. And i don't
want to boost a filter , i'm looking for a  way to give a higher score to
the document that have more match over the terms list
thanks
On Wednesday, October 17, 2012 5:46:13 PM UTC+2, Radu Gheorghe wrote:
Hello Samuel,
If you want to have higher score on the role_id, you can specify a
boost for that terms query in particular. Something like:
"bool" : {
"must" : [
{
"terms": {
"profile_type.profile_roles.role_id": [20,23,5],
"boost" : 5.0
}
},
{"terms": {"profile_type.profile_roles.skills.skill_id":
[32,34,25,6,38]}}
]
}
Best regards,
Radu
http://sematext.com/ -- Elasticsearch -- Solr -- Lucene
On Wed, Oct 17, 2012 at 6:17 PM, samuel merlet <samuel...@gmail.com<javascript:>>
wrote:
Hi,
I use a  filter on a nested object to check idf the document get a least
one
value like this :
"custom_filters_score": { 
 "query" : { "term" : { "entity_type_id": 1 } }, 
  "filters" : [ 
   { 
     "filter" : { 
       "bool" : 
       { 
         "should" : [ 
           { "term" : { "country_iso3": "usa" } } 
         ] 
       } 
     }, 
     "boost" : 3.0 
   }, 
    { 
     "filter" : { 
       "nested" : 
       { 
         "path" : "profile_type.profile_roles", 
         "query" : { 
           "filtered" : { 
             "query": { "match_all": {}}, 
             "filter" : 
             { 
               "bool" : 
               { 
                 "must" : 
                 [ 
                   {"terms": {"profile_type.profile_roles.role_id": 
[20,23,5]}},
{"terms":
{"profile_type.profile_roles.skills.skill_id": [32,34,25,6,38]}}
]
}
}
}
}
}
},
"boost" : 2.0
}
  ], 
 "score_mode" : "total" 
}
Here "profile_roles" is a nested object containing an array of "roles"
It works great , but in my results some document match all
profile_type.profile_roles.role_id ( 20 , 23 and 5 ) and all
profile_type.profile_roles.skills.skill_id while some other match only
one
role.
So i 'm looking for a way of giving a highest score to the document that
have more match , the one have 20 , 23 and 5 should have higher score
than
the one who only have role_id 5.
Is there any solution for that ?
Thanks
--
--
             
            
              
              
              
            
            
           
          
            
            
              Hello Samuel,
Sorry, I completely missed that you had a filter and not a query
there. The only solution I see here is to move those terms filters as
term queries, so you can boost on them.
Best regards,
Radu
http://sematext.com/ -- Elasticsearch -- Solr -- Lucene
On Wed, Oct 17, 2012 at 7:04 PM, samuel merlet samuel.merlet@gmail.com wrote:
Hi,
No this doesn't works, "terms" filter doesn't support boost. And i don't
want to boost a filter , i'm looking for a  way to give a higher score to
the document that have more match over the terms list
thanks
On Wednesday, October 17, 2012 5:46:13 PM UTC+2, Radu Gheorghe wrote:
Hello Samuel,
If you want to have higher score on the role_id, you can specify a
boost for that terms query in particular. Something like:
"bool" : {
"must" : [
{
"terms": {
"profile_type.profile_roles.role_id": [20,23,5],
"boost" : 5.0
}
},
{"terms": {"profile_type.profile_roles.skills.skill_id":
[32,34,25,6,38]}}
]
}
Best regards,
Radu
http://sematext.com/ -- Elasticsearch -- Solr -- Lucene
On Wed, Oct 17, 2012 at 6:17 PM, samuel merlet samuel...@gmail.com
wrote:
Hi,
I use a  filter on a nested object to check idf the document get a least
one
value like this :
"custom_filters_score": {
 "query" : { "term" : { "entity_type_id": 1 } },
  "filters" : [
   {
     "filter" : {
       "bool" :
       {
         "should" : [
           { "term" : { "country_iso3": "usa" } }
         ]
       }
     },
     "boost" : 3.0
   },
    {
     "filter" : {
       "nested" :
       {
         "path" : "profile_type.profile_roles",
         "query" : {
           "filtered" : {
             "query": { "match_all": {}},
             "filter" :
             {
               "bool" :
               {
                 "must" :
                 [
                   {"terms": {"profile_type.profile_roles.role_id":
[20,23,5]}},
{"terms":
{"profile_type.profile_roles.skills.skill_id": [32,34,25,6,38]}}
]
}
}
}
}
}
},
"boost" : 2.0
}
  ],
 "score_mode" : "total"
}
Here "profile_roles" is a nested object containing an array of "roles"
It works great , but in my results some document match all
profile_type.profile_roles.role_id ( 20 , 23 and 5 ) and all
profile_type.profile_roles.skills.skill_id while some other match only
one
role.
So i 'm looking for a way of giving a highest score to the document that
have more match , the one have 20 , 23 and 5 should have higher score
than
the one who only have role_id 5.
Is there any solution for that ?
Thanks
--
--
--