Как запросить и отсортировать эластичный поиск, выполнив вычисления на поле документа? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть 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? Если да, то как я могу достичь этого расчета, запрашивая эластичный поиск?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...