* Add new Query DSL section Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Change config settings Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Fix links Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Add Query DSL back to Search Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Fix remaining links Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Last reorder Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Add Heather's feedback Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Add Query DSL section. Delete Index Data page Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Fix index title Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Add correct title to managing indexes Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Change config yml Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * Add permalinks for each page in query DSL section Signed-off-by: Naarcha-AWS <naarcha@amazon.com> * :wq --------- Signed-off-by: Naarcha-AWS <naarcha@amazon.com>
282 lines
5.8 KiB
Markdown
282 lines
5.8 KiB
Markdown
---
|
||
layout: default
|
||
title: Rank field types
|
||
nav_order: 60
|
||
has_children: false
|
||
parent: Supported field types
|
||
redirect_from:
|
||
- /opensearch/supported-field-types/rank/
|
||
---
|
||
|
||
# Rank field types
|
||
|
||
The following table lists all rank field types that OpenSearch supports.
|
||
|
||
Field data type | Description
|
||
:--- | :---
|
||
[`rank_feature`](#rank-feature) | Boosts or decreases the relevance score of documents.
|
||
[`rank_features`](#rank-features) | Boosts or decreases the relevance score of documents. Used when the list of features is sparse.
|
||
|
||
Rank feature and rank features fields can be queried with [rank feature queries](#rank-feature-query) only. They do not support aggregating or sorting.
|
||
{: .note }
|
||
|
||
## Rank feature
|
||
|
||
A rank feature field type uses a positive [float]({{site.url}}{{site.baseurl}}/opensearch/supported-field-types/numeric/) value to boost or decrease the relevance score of a document in a `rank_feature` query. By default, this value boosts the relevance score. To decrease the relevance score, set the optional `positive_score_impact` parameter to false.
|
||
|
||
### Example
|
||
|
||
Create a mapping with a rank feature field:
|
||
|
||
```json
|
||
PUT chessplayers
|
||
{
|
||
"mappings": {
|
||
"properties": {
|
||
"name" : {
|
||
"type" : "text"
|
||
},
|
||
"rating": {
|
||
"type": "rank_feature"
|
||
},
|
||
"age": {
|
||
"type": "rank_feature",
|
||
"positive_score_impact": false
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
Index three documents with a rank_feature field that boosts the score (`rating`) and a rank_feature field that decreases the score (`age`):
|
||
|
||
```json
|
||
PUT testindex1/_doc/1
|
||
{
|
||
"name" : "John Doe",
|
||
"rating" : 2554,
|
||
"age" : 75
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
```json
|
||
PUT testindex1/_doc/2
|
||
{
|
||
"name" : "Kwaku Mensah",
|
||
"rating" : 2067,
|
||
"age": 10
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
```json
|
||
PUT testindex1/_doc/3
|
||
{
|
||
"name" : "Nikki Wolf",
|
||
"rating" : 1864,
|
||
"age" : 22
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
## Rank feature query
|
||
|
||
Using a rank feature query, you can rank players by rating, by age, or by both rating and age. If you rank players by rating, higher-rated players will have higher relevance scores. If you rank players by age, younger players will have higher relevance scores.
|
||
|
||
Use a rank feature query to search for players based on age and rating:
|
||
|
||
```json
|
||
GET chessplayers/_search
|
||
{
|
||
"query": {
|
||
"bool": {
|
||
"should": [
|
||
{
|
||
"rank_feature": {
|
||
"field": "rating"
|
||
}
|
||
},
|
||
{
|
||
"rank_feature": {
|
||
"field": "age"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
When ranked by both age and rating, younger players and players who are more highly ranked score better:
|
||
|
||
```json
|
||
{
|
||
"took" : 2,
|
||
"timed_out" : false,
|
||
"_shards" : {
|
||
"total" : 1,
|
||
"successful" : 1,
|
||
"skipped" : 0,
|
||
"failed" : 0
|
||
},
|
||
"hits" : {
|
||
"total" : {
|
||
"value" : 3,
|
||
"relation" : "eq"
|
||
},
|
||
"max_score" : 1.2093145,
|
||
"hits" : [
|
||
{
|
||
"_index" : "chessplayers",
|
||
"_type" : "_doc",
|
||
"_id" : "2",
|
||
"_score" : 1.2093145,
|
||
"_source" : {
|
||
"name" : "Kwaku Mensah",
|
||
"rating" : 1967,
|
||
"age" : 10
|
||
}
|
||
},
|
||
{
|
||
"_index" : "chessplayers",
|
||
"_type" : "_doc",
|
||
"_id" : "3",
|
||
"_score" : 1.0150313,
|
||
"_source" : {
|
||
"name" : "Nikki Wolf",
|
||
"rating" : 1864,
|
||
"age" : 22
|
||
}
|
||
},
|
||
{
|
||
"_index" : "chessplayers",
|
||
"_type" : "_doc",
|
||
"_id" : "1",
|
||
"_score" : 0.8098284,
|
||
"_source" : {
|
||
"name" : "John Doe",
|
||
"rating" : 2554,
|
||
"age" : 75
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
## Rank features
|
||
|
||
A rank features field type is similar to the rank feature field type, but it is more suitable for a sparse list of features. A rank features field can index numeric feature vectors that are later used to boost or decrease documents' relevance scores in `rank_feature` queries.
|
||
|
||
### Example
|
||
|
||
Create a mapping with a rank features field:
|
||
|
||
```json
|
||
PUT testindex1
|
||
{
|
||
"mappings": {
|
||
"properties": {
|
||
"correlations": {
|
||
"type": "rank_features"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
To index a document with a rank features field, use a hashmap with string keys and positive float values:
|
||
|
||
```json
|
||
PUT testindex1/_doc/1
|
||
{
|
||
"correlations": {
|
||
"young kids" : 1,
|
||
"older kids" : 15,
|
||
"teens" : 25.9
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
```json
|
||
PUT testindex1/_doc/2
|
||
{
|
||
"correlations": {
|
||
"teens": 10,
|
||
"adults": 95.7
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
Query the documents using a rank feature query:
|
||
|
||
```json
|
||
GET testindex1/_search
|
||
{
|
||
"query": {
|
||
"rank_feature": {
|
||
"field": "correlations.teens"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
{% include copy-curl.html %}
|
||
|
||
The response is ranked by relevance score:
|
||
|
||
```json
|
||
{
|
||
"took" : 123,
|
||
"timed_out" : false,
|
||
"_shards" : {
|
||
"total" : 1,
|
||
"successful" : 1,
|
||
"skipped" : 0,
|
||
"failed" : 0
|
||
},
|
||
"hits" : {
|
||
"total" : {
|
||
"value" : 2,
|
||
"relation" : "eq"
|
||
},
|
||
"max_score" : 0.6258503,
|
||
"hits" : [
|
||
{
|
||
"_index" : "testindex1",
|
||
"_type" : "_doc",
|
||
"_id" : "1",
|
||
"_score" : 0.6258503,
|
||
"_source" : {
|
||
"correlations" : {
|
||
"young kids" : 1,
|
||
"older kids" : 15,
|
||
"teens" : 25.9
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"_index" : "testindex1",
|
||
"_type" : "_doc",
|
||
"_id" : "2",
|
||
"_score" : 0.39263803,
|
||
"_source" : {
|
||
"correlations" : {
|
||
"teens" : 10,
|
||
"adults" : 95.7
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
Rank feature and rank features fields use top nine significant bits for precision, leading to about 0.4% relative error. Values are stored with a relative precision of 2<sup>−8</sup> = 0.00390625.
|
||
{: .note }
|