Как построить мой запрос Elasticsearch - PullRequest
0 голосов
/ 07 июня 2018

У меня проблема, которая кажется простой, но я не могу ее решить.Если в моем индексе есть данные:

 country | id | n1 | n2 | n3 | other
---------+----+----+----+----+-------
       1 |  1 |  0 |  2 |  0 |     1
       2 |  2 |  1 |  0 |  1 |     1
       2 |  2 |  1 |  0 |  1 |     2
       2 |  2 |  1 |  0 |  1 |     3
       2 |  3 |  1 |  1 |  1 |     1
       1 |  4 |  0 |  3 |  2 |     1
       1 |  4 |  0 |  3 |  2 |     2

Как мне выполнить следующий запрос в Elasticsearch?

 select DISTINCT country, id, n1, n2, n3 from MyIndex;
 country | id | n1 | n2 | n3
---------+----+----+----+----
       2 |  3 |  1 |  1 |  1
       1 |  4 |  0 |  3 |  2
       1 |  1 |  0 |  2 |  0
       2 |  2 |  1 |  0 |  1

И особенно:

select country, sum(n1), sum(n2), sum(n3) from (select DISTINCT country, id, n1, n2, n3 from MyIndex) as foo group by country;
 country | sum | sum | sum
---------+-----+-----+-----
       1 |   0 |   5 |   2
       2 |   2 |   1 |   2

1 Ответ

0 голосов
/ 07 июня 2018

Вам нужно использовать агрегации terms и sum, например:

{
  "size": 0,
  "aggs": {
    "countries": {
      "terms": {
        "field": "country"
      },
      "aggs": {
        "by_id": {
          "terms": {
            "field": "id"
          },
          "aggs": {
            "sum_n1": {
              "sum": {
                "field": "n1"
              }
            },
            "sum_n2": {
              "sum": {
                "field": "n2"
              }
            },
            "sum_n3": {
              "sum": {
                "field": "n3"
              }
            }
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...