Elasticsearch считает вхождения значения во вложенном документе - PullRequest
0 голосов
/ 20 июня 2019

Есть ли способ подсчитать, сколько раз конкретное значение во вложенном типе (например, services.service: "map") может быть найдено во всех документах?

Документ может выглядеть так:

{
  "services": [
    {
      "service": "map",
      "version": 2,
      "provider": "none"
    },
    {
      "service": "map",
      "version": 0,
      "provider": "none"
    },
    {
      "service": "language",
      "version": 2,
      "provider": "none"
    }
  ],
  "date": "2019-04-26T19:17:20.197Z"
}

Используя это сопоставление:

{
  "mappings": {
    "stat": {
      "properties": {
        "services": {
          "type": "nested",
          "properties": {
            "version": {
              "type": "keyword"
            },
            "provider": {
              "type": "keyword"
            },
            "service": {
              "type": "keyword"
            }
          }
        },
        "date": {
          "type": "date"
        }
      }
    }
  }
}

Я дошел до того, что возвратил счетчик для каждого документа (см. Запрос ниже), но я предпочитаю получать итоговое значение суммирования вхождений из всехмои документы.

{
 "query": {
   "nested": {
     "path": "services",
     "query": {
         "match" : {
             "services.service" : "map"
         }
     },
     "inner_hits": {
       "_source" : false,
       "docvalue_fields" : ["services.service.keyword"]
     }
   }
 }
}

1 Ответ

0 голосов
/ 21 июня 2019

Я думаю, что лучший способ - использовать вложенную агрегацию в сочетании с терминами агрегации, поскольку ваши поля имеют ключевое слово type. Вы можете добавить свойство include к агрегации, чтобы получить только сегмент определенного значения (или нескольких, когда передается как массив).

Запрос для отправленного вами дела будет выглядеть так:

GET myindex/_search
{
  "size": 0,
  "aggs": {
    "services": {
      "nested": {
        "path": "services"
      },
      "aggs": {
        "service_count": {
          "terms": {
            "field": "services.service",
            "include": "map"
          }
        }
      }
    }
  }
}

Чтобы узнать больше о вложенных агрегатах, см. Документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...