Агрегирование в упругом поиске по значениям поля - PullRequest
0 голосов
/ 26 июня 2018

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

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2874,
        "max_score": 1,
        "hits": [
            {
                "_index": "testfiles",
                "_type": "testfiles",
                "_id": "testfile.one",
                "_score": 1,
                "_source": {
                    "businessDate": 20171013,
                    "status": "Success"
                }
            },
            {
                "_index": "testfiles",
                "_type": "testfiles",
                "_id": "testfile.two",
                "_score": 1,
                "_source": {
                    "businessDate": 20171013,
                    "status": "Success"
                }
            },
            {
                "_index": "testfiles",
                "_type": "testfiles",
                "_id": "testfile.three",
                "_score": 1,
                "_source": {
                    "businessDate": 20171013,
                    "status": "Rejected"
                }
            },
            {
                "_index": "testfiles",
                "_type": "testfiles",
                "_id": "testfile.four",
                "_score": 1,
                "_source": {
                    "businessDate": 20171013,
                    "status": "Rejected"
                }
            }
        ]
    }
}

Может ли кто-нибудь помочь в достижении этого в упругой поисковой агрегации.

Ожидаемый ответ что-то вроде ниже

"aggregations": {
        "success_records": 2,
        "rejected_records": 2
    }

1 Ответ

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

Предполагая, что поле status имеет тип text, вам необходимо обновить его до multi-fields , имеющего тип keyword, необходимый для агрегирования. Затем запрос с использованием:

GET my_index/_search
{
  "size": 0,
  "aggs": {
    "statuses": {
      "terms": {
        "field": "status.raw"
      }
  }
}

Если у вас уже есть status в качестве поля keyword, то измените status.raw на status в приведенном выше запросе.

...