Python-запросыasticsearch - Группировка по полю и затем подсчет - PullRequest
0 голосов
/ 18 сентября 2018

Я застрял на запрос эластичного поиска с использованием Python

У меня есть данные, такие как :

{'_index': 'toto',
 '_type': 'tata',
 '_id': '9',
 '_version': 14,
 'found': True,
 '_source': {'Loss Event ID': 833,
  'Product': 'Sushi',
  'Company': 'SushiShop',
  'Profit': '10000000'}
}

{'_index': 'toto',
 '_type': 'tata',
 '_id': '11',
 '_version': 14,
 'found': True,
 '_source': {'Loss Event ID': 834,
  'Product': 'Burgers',
  'Company': 'McDonalds',
  'Profit': '4000000000'}
}

{'_index': 'toto',
 '_type': 'tata',
 '_id': '12',
 '_version': 14,
 'found': True,
 '_source': {'Loss Event ID': 836,
  'Product': 'Sushi',
  'Company': 'PlanetSushi',
  'Profit': '20000000'}
}

Цель : Я хотел бы сделать запрос с использованием python - в соответствии с group_by Product и счетом Прибыль , чтобы получить такой результат:

Продукт | Прибыль

-> Суши = 30000000

-> Бюргерса = 4000000000

(...)

Любая помощь? Я пробовал Python DSL, но это не удалось

enter code here

from time import time
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk

import requests
res = requests.get('http://localhost:9200')
print(res.content)

#connect to our cluster
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

r = es.search(index='toto',
              doc_type='tata',
              body= {
    "query": { 
            "match" : { "Product": "Sushi" }
    },
    "aggs" : {
                "sum_income" : { "sum" : { "field" : "Profit" } }
    }
})

Не удается ... Tks

1 Ответ

0 голосов
/ 18 сентября 2018

Используйте запрос агрегации ниже, чтобы получить общую прибыль по каждому продукту.

{
    "size": 0,
     "aggs": {
      "product_name": {
          "terms": {
              "field": "Product"
          },
          "aggs": {
              "total_profit": {
                  "sum": {
                      "field": "Profit"
                  }
              }
          }
      }
  }
}

Примечание : Profit поле должно быть любого числового типа.

...