Иерархия путей ElasticSearch и глубина папки?

Я использую токенайзер иерархии путей для поля в Logstash/ElasticSearch. Таким образом, если поле пути имеет вид /a/b/c, токенизатор преобразует его в

    /a
    /a/b
    /a/b/c

Я хочу генерировать статистику как

    a - 3 hits
    b - 2 hits
    c - 1 hit

Каков наилучший способ сделать это? Также мне интересно, есть ли способ добавить глубину папки в отдельное поле.

1 ответ

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

Определите ваш собственный анализатор:

PUT /test_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "nonword": {
          "type": "pattern",
          "pattern": "/"
        }
      }
    }
  }
}

Создать отображение:

 POST /test_index/_mapping/test_1
{
  "properties": {
    "dir": {
      "type": "string",
      "index": "analyzed",
      "analyzer": "nonword",
      "fields": {
        "un_touched": {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }
  }
}

Примечание: поле "un_touched" сохраняется для хранения исходной версии данных.

Заполните данные и выполните агрегирование:

GET /test_index/test_1/_search
{
  "aggs": {
    "my_agg": {
      "terms": {
        "field": "dir",
        "size": 0
      }
    }
  }
}

Примечание. Это лишь минимальный пример, и вам следует позаботиться о шаблоне;

Другие вопросы по тегам