This kind of query is one of the most powerful queries available, because it allows extensive customization of a scoring algorithm. The function score query allows us to define a function that controls the score of the documents which are returned by a query.
Generally, these functions are CPU intensive and executing them on a large dataset requires a lot of memory, but computing them on a small subset can significantly improve the search quality.
The common scenarios used for this query are:
- Creating a custom score function (with decay function, for example)
- Creating a custom boost factor, for example, based on another field (that is, boosting a document by distance from a point)
- Creating a custom filter score function, for example, based on scripting Elasticsearch capabilities
- Ordering the documents randomly.