Сортировка Elasticsearch, замените пропущенное поле другим - PullRequest
0 голосов
/ 20 мая 2019

У меня есть товары, которые я бы хотел отсортировать по цене.У них есть два свойства, product_price и special_price.

special_price не всегда присутствует в документе.Читая документацию, похоже, что вы можете добавить элемент missing и вместо этого выполнить поиск по нему.

Я добавил в запрос следующее:

"sort" : [
        { "special_price" : {"missing" : "product_price"} },
],

Состояние документов:

Отсутствующий параметр указывает, как документы, в которых отсутствует поле, должныбыть обработанным: отсутствующее значение может быть установлено как _last, _first или пользовательское значение (которое будет использоваться для отсутствующих документов в качестве значения сортировки).

Я также попытался указать запасное значениекак

"sort" : [
        { "special_price" : {"missing" : "doc['product_price'].value"} },
],

Я не вижу, что мне здесь не хватает?

1 Ответ

1 голос
/ 21 мая 2019

missing поддерживает три значения _last, _first или пользовательское значение (число).Вы не можете указать другое поле в качестве значения параметра missing.Поскольку вы хотите вернуться к значению другого поля, вы можете использовать сортировку на основе сценариев .

Так что сортировка может быть определена как:

{
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "lang": "painless",
        "source": "if(doc['special_price'].size() != 0) { return doc['special_price'].value; } return doc['product_price'].value;"
      },
      "order": "desc"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...