Иерархия путей 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
}
}
}
}
Примечание. Это лишь минимальный пример, и вам следует позаботиться о шаблоне;