If you want to build a search query in Easticsearch where you can give documents a bonus score depending on how often a property can be found in other documents
– you need is a Subquery which is not supported by Elasticsearch, you need another better solution.
An Example for a Subquery is the problem:
Imagine a CD online shop. You want to score CDs ( = documents) higher which
1. match a term query AND
2. and which artist has many other CDs in your shop database
You would need a field, which aggragts the artist count in your mapping (artistCount for Example) and on query time and boost the artistCount field with the score:
{
"query" : {
"custom_score" : {
"query" : {
"match_all" : {}
},
"script" : "_score + (1 * doc.artistCount.integerValue)"
}
}
}
It would be also a good idea, to have a second index, which holds the artistCount information, because on every update of the inventory of your shop, the artsitCount needs to be recalculated.