Skip to content
Snippets Groups Projects
Commit e33ec3b1 authored by Aivaras Gotovskis's avatar Aivaras Gotovskis
Browse files

Add function score doc.

parent 96013154
No related branches found
No related tags found
No related merge requests found
# Function Score Query
> More info about function score query is in the [official elasticsearch docs][1]
The function score query allows you to modify the score of documents that are retrieved by a query. This can be useful
if, for example, a score function is computationally expensive and it is sufficient to compute the score on a filtered
set of documents.
## Example with linear decay function
```JSON
{
"query": {
"function_score": {
"query": {
"range": {
"price": {
"gte": 10,
"lte": 100
}
}
},
"functions": [
{
"linear": {
"price": {
"origin": 10,
"scale": 50,
"offset": 0,
"decay" : 0.5
}
}
}
]
}
}
}
```
In DSL
```php
$rangeQuery = new RangeQuery('price');
$rangeQuery->addParameter(RangeQuery::GTE, 10);
$rangeQuery->addParameter(RangeQuery::LTE, 100);
$functionScoreQuery = new FunctionScoreQuery($rangeQuery);
$functionScoreQuery->addDecayFunction(
'linear',
'price',
[
'origin' => 10,
'scale' => 50,
'offset' => 0,
'decay' => 0.5
]
);
$search = new Search();
$search->addQuery($functionScoreQuery);
$queryArray = $search->toArray();
```
## Example weight function to multiply score of subset
```JSON
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"weight": 2,
"filter": {
"range": {
"price": {
"gte": 10,
"lte": 40
}
}
}
}
]
}
}
}
```
In DSL:
```php
$functionScoreQuery = new FunctionScoreQuery(new MatchAllQuery());
$rangeFilter = new RangeFilter('price', ['gte' => 10, 'lte' => 100]);
$functionScoreQuery->addWeightFunction(2, $rangeFilter);
$search = new Search();
$search->addQuery($functionScoreQuery);
$queryArray = $search->toArray();
```
## Example Field Value Factor Function
```php
$functionScoreQuery = new FunctionScoreQuery(new MatchAllQuery());
$existsFilter = new ExistsFilter('price');
$functionScoreQuery->addFieldValueFactorFunction('price', 0.5, 'ln', $existsFilter);
$search = new Search();
$search->addQuery($functionScoreQuery);
$queryArray = $search->toArray();
```
Will result in
```JSON
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"factor": 0.5,
"modifier": "ln"
},
"filter": {
"exists": {
"field": "price"
}
}
}
]
}
}
}
```
## Random function example
```php
$functionScoreQuery = new FunctionScoreQuery(new MatchAllQuery());
$functionScoreQuery->addRandomFunction();
$search = new Search();
$search->addQuery($functionScoreQuery);
$queryArray = $search->toArray();
```
Will result in
```JSON
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"random_score": {}
}
]
}
}
}
```
[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment