2013-08-28 19:24:34 -04:00
|
|
|
[[mapping-boost-field]]
|
|
|
|
=== `_boost`
|
|
|
|
|
2014-01-09 10:03:38 -05:00
|
|
|
deprecated[1.0.0.RC1,See <<function-score-instead-of-boost>>]
|
|
|
|
|
2013-08-28 19:24:34 -04:00
|
|
|
Boosting is the process of enhancing the relevancy of a document or
|
2014-03-07 08:21:45 -05:00
|
|
|
field. Field level mapping allows to define an explicit boost level on a
|
2013-08-28 19:24:34 -04:00
|
|
|
specific field. The boost field mapping (applied on the
|
|
|
|
<<mapping-root-object-type,root object>>) allows
|
|
|
|
to define a boost field mapping where *its content will control the
|
|
|
|
boost level of the document*. For example, consider the following
|
|
|
|
mapping:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"tweet" : {
|
|
|
|
"_boost" : {"name" : "my_boost", "null_value" : 1.0}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
|
|
|
|
2014-03-07 08:21:45 -05:00
|
|
|
The above mapping defines a mapping for a field named `my_boost`. If the
|
2013-08-28 19:24:34 -04:00
|
|
|
`my_boost` field exists within the JSON document indexed, its value will
|
|
|
|
control the boost level of the document indexed. For example, the
|
|
|
|
following JSON document will be indexed with a boost value of `2.2`:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"my_boost" : 2.2,
|
|
|
|
"message" : "This is a tweet!"
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2014-01-09 10:03:38 -05:00
|
|
|
|
|
|
|
[[function-score-instead-of-boost]]
|
|
|
|
==== Function score instead of boost
|
|
|
|
|
|
|
|
Support for document boosting via the `_boost` field has been removed
|
|
|
|
from Lucene and is deprecated in Elasticsearch as of v1.0.0.RC1. The
|
|
|
|
implementation in Lucene resulted in unpredictable result when
|
|
|
|
used with multiple fields or multi-value fields.
|
|
|
|
|
|
|
|
Instead, the <<query-dsl-function-score-query>> can be used to achieve
|
|
|
|
the desired functionality by boosting each document by the value in
|
2014-08-26 08:15:46 -04:00
|
|
|
any field of the document:
|
2014-01-09 10:03:38 -05:00
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"query": {
|
|
|
|
"function_score": {
|
|
|
|
"query": { <1>
|
|
|
|
"match": {
|
|
|
|
"title": "your main query"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"functions": [{
|
2014-03-19 22:23:50 -04:00
|
|
|
"field_value_factor": { <2>
|
|
|
|
"field": "my_boost_field"
|
2014-01-09 10:03:38 -05:00
|
|
|
}
|
|
|
|
}],
|
|
|
|
"score_mode": "multiply"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
|
|
|
<1> The original query, now wrapped in a `function_score` query.
|
2014-03-19 22:23:50 -04:00
|
|
|
<2> This function returns the value in `my_boost_field`, which is then
|
2014-01-09 10:03:38 -05:00
|
|
|
multiplied by the query `_score` for each document.
|
2014-07-22 08:24:58 -04:00
|
|
|
|
|
|
|
Note, that `field_value_factor` is a 1.2.x feature.
|