Rank features field type
A rank_features field can index numeric feature vectors, so that they can later be used to boost documents in queries with a rank_feature query.
It is analogous to the rank_feature data type but is better suited when the list of features is sparse so that it wouldn’t be reasonable to add one field to the mappings for each of them.
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"topics": {
"type": "rank_features"
},
"negative_reviews": {
"type": "rank_features",
"positive_score_impact": False
}
}
},
)
print(resp)
resp1 = client.index(
index="my-index-000001",
id="1",
document={
"topics": {
"politics": 20,
"economics": 50.8
},
"negative_reviews": {
"1star": 10,
"2star": 100
}
},
)
print(resp1)
resp2 = client.index(
index="my-index-000001",
id="2",
document={
"topics": {
"politics": 5.2,
"sports": 80.1
},
"negative_reviews": {
"1star": 1,
"2star": 10
}
},
)
print(resp2)
resp3 = client.search(
index="my-index-000001",
query={
"rank_feature": {
"field": "topics.politics"
}
},
)
print(resp3)
resp4 = client.search(
index="my-index-000001",
query={
"rank_feature": {
"field": "negative_reviews.1star"
}
},
)
print(resp4)
resp5 = client.search(
index="my-index-000001",
query={
"term": {
"topics": "economics"
}
},
)
print(resp5) const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
topics: {
type: "rank_features",
},
negative_reviews: {
type: "rank_features",
positive_score_impact: false,
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "my-index-000001",
id: 1,
document: {
topics: {
politics: 20,
economics: 50.8,
},
negative_reviews: {
"1star": 10,
"2star": 100,
},
},
});
console.log(response1);
const response2 = await client.index({
index: "my-index-000001",
id: 2,
document: {
topics: {
politics: 5.2,
sports: 80.1,
},
negative_reviews: {
"1star": 1,
"2star": 10,
},
},
});
console.log(response2);
const response3 = await client.search({
index: "my-index-000001",
query: {
rank_feature: {
field: "topics.politics",
},
},
});
console.log(response3);
const response4 = await client.search({
index: "my-index-000001",
query: {
rank_feature: {
field: "negative_reviews.1star",
},
},
});
console.log(response4);
const response5 = await client.search({
index: "my-index-000001",
query: {
term: {
topics: "economics",
},
},
});
console.log(response5); PUT my-index-000001
{
"mappings": {
"properties": {
"topics": {
"type": "rank_features"
},
"negative_reviews" : {
"type": "rank_features",
"positive_score_impact": false
}
}
}
}
PUT my-index-000001/_doc/1
{
"topics": {
"politics": 20,
"economics": 50.8
},
"negative_reviews": {
"1star": 10,
"2star": 100
}
}
PUT my-index-000001/_doc/2
{
"topics": {
"politics": 5.2,
"sports": 80.1
},
"negative_reviews": {
"1star": 1,
"2star": 10
}
}
GET my-index-000001/_search
{
"query": {
"rank_feature": {
"field": "topics.politics"
}
}
}
GET my-index-000001/_search
{
"query": {
"rank_feature": {
"field": "negative_reviews.1star"
}
}
}
GET my-index-000001/_search
{
"query": {
"term": {
"topics": "economics"
}
}
} | Rank features fields must use the | |
| Rank features that correlate negatively with the score need to declare it | |
| Rank features fields must be a hash with string keys and strictly positive numeric values | |
| This query ranks documents by how much they are about the "politics" topic. | |
| This query ranks documents inversely to the number of "1star" reviews they received. | |
| This query returns documents that store the "economics" feature in the "topics" field. |
rank_features fields only support single-valued features and strictly positive values. Multi-valued fields and zero or negative values will be rejected.
rank_features fields do not support sorting or aggregating and may only be queried using rank_feature or term queries.
term queries on rank_features fields are scored by multiplying the matched stored feature value by the provided boost.
rank_features fields only preserve 9 significant bits for the precision, which translates to a relative error of about 0.4%.
Rank features that correlate negatively with the score should set positive_score_impact to false (defaults to true). This will be used by the rank_feature query to modify the scoring formula in such a way that the score decreases with the value of the feature instead of increasing.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/rank-features.html