У меня есть ElasticSearch, и у каждого документа есть 3 поля -
1. id
2. валюта
3. цена
Я хочу отсортировать данные по цене,
Что я могу сделать, используя запрос сортировки.
Но мои данные разные валюты, например. USD и INR,
Предполагая 1 USD = 70 INR
,
Документ, содержащий 1 доллар США в качестве цены,
должен отображаться первым при сортировке по убыванию.
Создание -
PUT /price/_doc/1?pretty
{
"id":1,
"currency": "USD",
"price": 1
}
PUT /price/_doc/2?pretty
{
"id":2,
"currency": "INR",
"price": 50
}
Запрос сортировки -
GET /price/_search/
{
"sort": [
{
"price": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}
Данные выглядят так -
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "price",
"_type": "_doc",
"_id": "2",
"_score": null,
"_source": {
"id": 2,
"currency": "INR",
"price": 50
},
"sort": [
50
]
},
{
"_index": "price",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"id": 1,
"currency": "USD",
"price": 1
},
"sort": [
1
]
}
]
}
}
Ожидается -
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "price",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"id": 1,
"currency": "USD",
"price": 1
},
"sort": [
1
]
},
{
"_index": "price",
"_type": "_doc",
"_id": "2",
"_score": null,
"_source": {
"id": 2,
"currency": "INR",
"price": 50
},
"sort": [
50
]
}
]
}
}
Я знаю, что запросы могут выполняться по нескольким индексам одновременно,
Поможет ли мне другой индекс ценовой информации?
Возможен ли такой вид сортировки и расчета в ElasticSearch?
Если да, то как я могу достичь этого расчета, запрашивая эластичный поиск?