Агрегирование условий заказа по частям - PullRequest
0 голосов
/ 23 мая 2019

Порядок агрегации терминов заказа по источникам документации по агрегации с наибольшим количеством просмотров

У меня есть запрос,

Контекст: Это один индекс турпакетов с одним свойством set_url, несколько пакетов с одинаковым set_url называются семейными пакетами.

Требование: Получение seo-пакетов в порядке сортировки любого поля, скажем, длительности (индексируется как type: integer), но сортировка будет основываться на минимальной цене пакета на семью и требует результата размером 20.

Постановка задачи в простом виде : скажем, агрегатор терминов по полю set_url создает 3 блока A, B, C, и каждый блок имеет 3 пакета, (A1, A2, A3), (B1, B2, B3) и (C1, C2, C3), теперь сначала я хочу вычислить пакет с минимальной ценой из каждого сегмента, скажем, это будет A2, B3, C1, затем я хочу отсортировать сегменты по полю длительности соответствующих пакетов с минимальной ценой ведро, то есть пакеты A2, B3 и C1.

Что я пытаюсь сделать:

Применить некоторые фильтры

применить условия агрегации верхнего уровня к ключу set_url, делая пакеты семейства пакетами. Теперь я хочу упорядочить эти сегменты по пакетам семейства минимальных цен, которые получены из агрегации топ-хитов и агрегации топ-хитов, агрегации метрик в соответствии с документами ES.

Это субагрегация хитов типа top, которая выполняет сортировку по цене в порядке возрастания и принимает один размер, чтобы выбрать пакет семейства минимальных цен.

Текущий запрос:

{
   index: "seo_packages",
   type: "seo_package",
   body: {
   size: 0,
   query: {
     bool: {
       filter: {
         and: [{
                  terms: {
                    package_type: ["seo"]
                  }
               },
               {
                  terms: {
                    categories: ["tour"]
                  }
               },
               {
                 term: {
                   is_published: true
                 }
               },
             ],
        },
    }
},
aggs: {
  group_by_set_url: {
    terms: {
      field: "set_url",
      size: 10,
      order: {
        "min_price_expressions.how to access doc source property duration here" => "asc"
      }
    },
    aggs: {
      min_price_expressions: {
        top_hits: {
          sort: [{
            price_expression: {
              order: "asc"
            }
          }],
              _source: {
                includes: [: id,: duration]
              },
              size: 1
            },
          }
        }
      }
    }
  }
}

Каким должен быть здесь порядок заказа, чтобы получить доступ к свойству документа агрегации лучших хитов?

Заранее спасибо.

1 Ответ

0 голосов
/ 23 мая 2019

Поскольку вы хотите отсортировать по минимальному значению из семейного пакета, вместо агрегации top_hits вы можете использовать минимальное агрегирование в качестве вложенного агрегации group_by_set_url агрегации.Затем можно использовать значение минимальной агрегации для сортировки агрегации group_by_set_url.Таким образом, агрегация будет выглядеть следующим образом:

{
  "query": {
    // add query here
  },
  "aggs": {
    "group_by_set_url": {
      "terms": {
        "field": "set_url",
        "size": 10,
        "order": {
          "min_duration": "asc"
        }
      },
      "aggs": {
        "min_duration": {
          "min": {
            "field": "duration"
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...