Как создать поле со сценарием для количества значений в части данных? - PullRequest
0 голосов
/ 15 мая 2019

Я собираю данные в Elasticsearch и визуализирую в Кибане. Мои данные содержат переменное количество полей для каждой записи, и я хочу создать гистограмму, отслеживающую количество полей для каждой записи. Например, вот две мои части данных

{
   "extensions": {
      "@app/default-preset": "^2.2.0",
      "@app/redux": "^2.0.0",
      "@app/jest-plugin": "latest",
      "@app/next": "^2.0.0",
      "@app/cli": "latest",
      "@app/log": "^2.2.2",
      "@app/auth": "^2.0.0",
      "@app/intl": "^3.0.0"
    }
}
{
    "extensions": {
      "@app/default-preset": "^2.2.0",
      "@app/mocha-plugin": "latest",
      "@app/redux": "^2.0.0",
      "@app/cookies": "^2.0.0",
      "@app/next": "^2.0.0",
      "@app/intl-plugin": "^3.0.0",
      "@app/log": "^2.0.0",
      "@app/cli": "latest",
      "@app/auth": "^2.0.0",
      "@app/intl": "^3.1.1"
    }
}

Итак, для первого я хотел бы получить значение 7, а для второго - значение 10. Еще лучше было бы отслеживать наиболее распространенные расширения, но это отдельный вопрос. Я попытался и не смог создать сценарий поля для этого. В Javascript это будет Object.keys(extensions).length, но я не знаю, как это сделать на языке painless.

1 Ответ

0 голосов
/ 01 июля 2019

Должно работать что-то вроде следующего:

GET <your_index>/_search
{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "doc_field_count": {
      "script": "doc['extensions'].size()"
    }
  }
}

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

...