Проблема при написании запросов эластичного поиска для вложенного поля - PullRequest
0 голосов
/ 05 июля 2019

У меня проблема с написанием запросов эластичного поиска с вложенным полем.Я думаю, вы могли бы помочь мне, потому что я единственный, кто использует Elastic в своей компании, и я не знаю, как решить мою проблему в одиночку.

Вот как выглядят мои документы по ES в этом индексе (оченьупрощенная версия)

{
    "_index":"index_test",
    "_type":"type_test",
    "_id":"1",
    "_score":1.0,
    "_source":{
       "category":1,
       "value_period":[
          {
             "value":5.4,
             "month":"2019-01"
          }
       ],
       "client_id":"80",

    }
 },
 {
    "_index":"index_test",
    "_type":"type_test",
    "_id":"2",
    "_score":1.0,
    "_source":{
       "category":1,
       "value_period":[
          {
             "value":10.0,
             "month":"2019-02"
          }
       ],
       "client_id":"80",

    }
 }{
    "_index":"index_test",
    "_type":"type_test",
    "_id":"2",
    "_score":1.0,
    "_source":{
       "category":2,
       "value_period":[
          {
             "value":20.0,
             "month":"2019-02"
          }
       ],
       "client_id":"80",

    }
 }

Вот вопрос: мне нужно написать 4 запроса для четырех разных вариантов использования:

2 простых запроса: «сумма в месяц» и «сумма в категории»

  • 1-й: агрегация date_histogram (во вложенном поле "value_period.month") и агрегация суммы (в value_period.value), чтобы получить простую сумму по месяцам (1 значение в месяц).
  • 2-й: термин агрегация (в поле "категория") и сумма агрегации (в value_period.value), чтобы получить простое значение для категории

2 запроса, немного более сложных: "сумма в месяц на категорию "и" сумма на категорию в месяц "

  • 3-й: агрегация date_histogram (во вложенном поле" value_period.month "), агрегация термина (в поле" category ")и сумма агрегации (по значению_периod.value) для получения суммы в месяц по категории

  • 4-й: агрегация сроков (в поле «категория»), агрегация даты_гистограммы (во вложенном поле «value_period.month») иагрегация сумм (on value_period.value) для получения суммы за категорию в месяц

Для 1-го случая (простое значение в месяц) я уже написал запрос, и он работает:

{
   "aggs":{
      "nested_field":{
         "nested":{
            "path":"value_period"
         },
         "aggs":{
            "date_agg_interval":{
               "date_histogram":{
                  "field":"value_period.month",
                  "interval":"1M",
                  "format":"yyyy-MM",
                  "min_doc_count":0
               },
               "aggs":{
                  "agg_sum":{
                     "sum":{
                        "field":"value_period.value"
                     }
                  }
               }
            }
         }
      }
   }
}

Для 2-го случая (значение для категории) я пробовал этот запрос, но мои результаты агрегирования пусты, и я не знаю, почему ... Вот запрос:

{
   "aggs":{
      "nested_field":{
         "nested":{
            "path":"value_period"
         },
         "aggs":{
            "agg_category":{
               "terms":{
                  "field":"category"
               },
               "aggs":{
                  "agg_sum":{
                     "sum":{
                        "field":"value_period.value"
                     }
                  }
               }
            }
         }
      }
   }
}

Для 3-го и 4-го (еще один уровень агрегации) я много пробовал, но ничего не получается.

Я действительно хочу заранее поблагодарить всех, кто поможет мне и рассмотрит мою просьбу.

PS: извините за мой уровень английского, я француз.

Denis

...