упругая сортировка путем вычитания двух числовых полей c - PullRequest
0 голосов
/ 23 апреля 2020

Можно ли отсортировать результат путем вычитания между двумя полями?

Например, есть два поля: "цена", "lastPrice". Я бы отсортировал документы по цене - lastPrice.

Можно ли это сделать напрямую или единственный способ сделать это - создать новое поле?

1 Ответ

1 голос
/ 23 апреля 2020

Можно использовать сценарий сортировки

Данные:

[
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "LI9zpnEB1jFeu7E5l58r",
        "_score" : 1.0,
        "_source" : {
          "title" : "a",
          "price" : 10,
          "lastPrice" : 15
        }
      },
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "LY9zpnEB1jFeu7E5xJ_A",
        "_score" : 1.0,
        "_source" : {
          "title" : "b",
          "price" : 15,
          "lastPrice" : 20
        }
      },
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "Lo95pnEB1jFeu7E5Sp9w",
        "_score" : 1.0,
        "_source" : {
          "title" : "b",
          "price" : 20,
          "lastPrice" : 21
        }
      }
    ]

Запрос:

{
  "sort": [
    {
      "_script": {
        "type": "number",
        "script": {
          "lang": "painless",
          "source": "doc['lastPrice'].value-doc['price'].value"
        },
        "order": "asc"
      }
    }
  ]
}

Результат:

[
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "Lo95pnEB1jFeu7E5Sp9w",
        "_score" : null,
        "_source" : {
          "title" : "b",
          "price" : 20,
          "lastPrice" : 21
        },
        "sort" : [
          1.0
        ]
      },
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "LI9zpnEB1jFeu7E5l58r",
        "_score" : null,
        "_source" : {
          "title" : "a",
          "price" : 10,
          "lastPrice" : 15
        },
        "sort" : [
          5.0
        ]
      },
      {
        "_index" : "index19",
        "_type" : "_doc",
        "_id" : "LY9zpnEB1jFeu7E5xJ_A",
        "_score" : null,
        "_source" : {
          "title" : "b",
          "price" : 15,
          "lastPrice" : 20
        },
        "sort" : [
          5.0
        ]
      }
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...