Токенизатор иерархии путей
Токенизатор path_hierarchy принимает значение иерархического типа, подобное пути в файловой системе, разбивает его по разделителю пути и генерирует термин для каждого компонента в дереве.
Пример вывода
POST _analyze
{
"tokenizer": "path_hierarchy",
"text": "/one/two/three"
} Вышеупомянутый текст породит следующие термины:
[ /one, /one/two, /one/two/three ]
Настройка
Токенизатор path_hierarchy принимает следующие параметры:
| | Символ, используемый в качестве разделителя пути. По умолчанию |
| | Необязательный символ для замены разделителя. По умолчанию |
| | Количество символов, читаемых в буфер термина за один проход. По умолчанию |
| | Если установлено значение |
| | Количество начальных токенов, которые нужно пропустить. По умолчанию |
Пример конфигурации
В этом примере мы настраиваем токенизатор path_hierarchy для разделения по символам - и замены их на /. Первые два токена пропускаются:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "path_hierarchy",
"delimiter": "-",
"replacement": "/",
"skip": 2
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "one-two-three-four-five"
} Вышеприведенный пример создает следующие термины:
[ /three, /three/four, /three/four/five ]
Если установить значение reverse на true, то результат будет следующим:
[ one/two/three/, two/three/, three/ ]
Подробные примеры
Типичное применение токенизатора path_hierarchy - фильтрация результатов по путям файлов. При индексировании пути файла вместе с данными, использование токенизатора path_hierarchy для анализа пути позволяет фильтровать результаты по различным частям строки пути файла.
В этом примере конфигурируется индекс с двумя пользовательскими анализаторами, которые применяются к многопольным полям текстового поля file_path, хранящего имена файлов. Один из двух анализаторов использует обратную токенизацию. Затем индексируются несколько тестовых документов, представляющих пути к фотографиям в папках фото разных пользователей.
PUT file-path-test
{
"settings": {
"analysis": {
"analyzer": {
"custom_path_tree": {
"tokenizer": "custom_hierarchy"
},
"custom_path_tree_reversed": {
"tokenizer": "custom_hierarchy_reversed"
}
},
"tokenizer": {
"custom_hierarchy": {
"type": "path_hierarchy",
"delimiter": "/"
},
"custom_hierarchy_reversed": {
"type": "path_hierarchy",
"delimiter": "/",
"reverse": "true"
}
}
}
},
"mappings": {
"properties": {
"file_path": {
"type": "text",
"fields": {
"tree": {
"type": "text",
"analyzer": "custom_path_tree"
},
"tree_reversed": {
"type": "text",
"analyzer": "custom_path_tree_reversed"
}
}
}
}
}
}
POST file-path-test/_doc/1
{
"file_path": "/User/alice/photos/2017/05/16/my_photo1.jpg"
}
POST file-path-test/_doc/2
{
"file_path": "/User/alice/photos/2017/05/16/my_photo2.jpg"
}
POST file-path-test/_doc/3
{
"file_path": "/User/alice/photos/2017/05/16/my_photo3.jpg"
}
POST file-path-test/_doc/4
{
"file_path": "/User/alice/photos/2017/05/15/my_photo1.jpg"
}
POST file-path-test/_doc/5
{
"file_path": "/User/bob/photos/2017/05/16/my_photo1.jpg"
} Поиск по определённой строке пути файла в текстовом поле соответствует всем примерным документам, при этом документы Боба имеют наивысший рейтинг из-за bob, также являющегося одним из терминов, созданных стандартным анализатором, повышающим релевантность документов Боба.
GET file-path-test/_search
{
"query": {
"match": {
"file_path": "/User/bob/photos/2017/05"
}
}
} Простой способ сопоставления или фильтрации документов с путями файлов, существующими в определенной директории, используя поле file_path.tree.
GET file-path-test/_search
{
"query": {
"term": {
"file_path.tree": "/User/alice/photos/2017/05/16"
}
}
} С параметром обратного порядка для этого токенизатора также возможно сопоставление с другого конца пути файла, например, с отдельными именами файлов или глубокими поддиректориями. Следующий пример показывает поиск всех файлов с именем my_photo1.jpg в любой директории через поле file_path.tree_reversed, настроенное с параметром обратного порядка в схеме.
GET file-path-test/_search
{
"query": {
"term": {
"file_path.tree_reversed": {
"value": "my_photo1.jpg"
}
}
}
} Просмотр токенов, сгенерированных как в прямом, так и в обратном порядке, наглядно демонстрирует токены, созданные для одного и того же значения пути файла.
POST file-path-test/_analyze
{
"analyzer": "custom_path_tree",
"text": "/User/alice/photos/2017/05/16/my_photo1.jpg"
}
POST file-path-test/_analyze
{
"analyzer": "custom_path_tree_reversed",
"text": "/User/alice/photos/2017/05/16/my_photo1.jpg"
} Также полезно уметь фильтровать по путям файлов в сочетании с другими типами поисков, например, в данном примере поиск путей файлов с 16, которые также должны находиться в фотокаталоге Алисы.
GET file-path-test/_search
{
"query": {
"bool" : {
"must" : {
"match" : { "file_path" : "16" }
},
"filter": {
"term" : { "file_path.tree" : "/User/alice" }
}
}
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analysis-pathhierarchy-tokenizer.html