Как сделать сортировку скрипта на вложенном поле с Elasticsearch? - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю с документами, которые выглядят следующим образом:

{
  "product_name": "abc",
  "prices": {
    "regular": 9.99,
    "pricing_tables": [
     { "id": 1, "price": 8.99 },
     { "id": 2, "price": 7.99 }
    ]
  }
}

Где Prices.pricing_tables - это вложенное поле.

Что я хочу сделать, это отсортировать со следующими логинами c, с заданным идентификатором таблицы цен:

  • Если вложенное поле содержит указанный идентификатор, используйте pricing_tables.price
  • Если вложенное поле не содержит id, use Prices.regular

Запрос, который я пытался использовать до сих пор:

"sort": [
{
  "_script": {
    "type": "number",
    "script": {
      "lang": "painless",
      "source": """
        if(doc['prices.pricing_tables.price'].size() != 0) { 
          return doc['prices.pricing_tables.price'].value; 
        } 
        else {
          return doc['prices.regular'].value;
        }
        """
    },
    "nested": {
      "path": "prices.pricing_tables",
      "filter": {
        "term": {"prices.pricing_tables.id": 1}
      }
    },
    "order": "asc"
  }
}  
]

Однако он не работает должным образом. Если во вложенном объекте priceing_tables нет записей, значение сортировки в результате всегда равно 1.7976931348623157E308

Чего мне здесь не хватает? Возможно ли это сделать?

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