Elasticsearch: Как я могу получить количество документов по количеству элементов в собственности? - PullRequest
0 голосов
/ 20 ноября 2018

Допустим, у меня есть документы Elasticsearch, которые выглядят следующим образом

{
    "_index": "sample.index",
    "_type": "inventory",
    "_id": "ebcc7f5c-1697-438f-911f-b8e9ff5554e9",
    "_score": 1,
    "_source": {
        "name": "salt",
        "properties": {
            "vendors": ["vendor 1", "vendor 2"]
        }
    }
},
{
    "_index": "sample.index",
    "_type": "inventory",
    "_id": "f5875c5c-9bf1-448b-99d9-47d873d4f016",
    "_score": 1,
    "_source": {
        "name": "pepper",
        "properties": {
            "vendors": ["vendor 1"]
        }
    }
}

Что я хотел бы сделать, это получить количество элементов, которые могут быть получены от одного поставщика, двух поставщиков и т. Д.запрос, основанный на длине массива vendors.

Это тип вывода, который я пытаюсь получить, или что-то подобное.

{
    "aggregations": {
        "vendor_counts": {
            "buckets": [
                {
                    "vendor_array_length": "1",
                    "doc_count": 1
                },
                {
                    "vendor_array_length": "2",
                    "doc_count": 1
                }
            ]
        }
    }
}

Заранее спасибо за любую помощь:)

РЕДАКТИРОВАТЬ: нижеприведенный ответ, кажется, работает для более новых версий ES, но мне приходится использовать более старую версию (я узнал об этом после первоначальной публикации этого вопроса).Следующий запрос работает для меня на ES 2.4.

{
  "size": 0,
  "aggs": {
    "length": {
      "terms": {
        "script": "_source.vendors.size()"
      }
    }
  }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете сделать это так:

{
  "size": 0,
  "aggs": {
    "length": {
      "terms": {
        "script": {
          "source": "params._source.vendors.length",
          "lang": "painless"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...