Фильтр токенов Keyword marker
Помечает указанные токены как ключевые, которые не подвергаются сведению.
Фильтр keyword_marker присваивает указанным токенам атрибут keyword со значением true. Фильтры токенов стемминга, такие как stemmer или porter_stem, пропускают токены с атрибутом keyword со значением true.
Для корректной работы фильтр keyword_marker должен быть указан перед любыми фильтрами стемминга токенов в конфигурации анализатора.
Фильтр keyword_marker использует фильтр Lucene’s KeywordMarkerFilter.
Пример
Чтобы увидеть, как работает фильтр keyword_marker, сначала необходимо получить поток токенов, содержащий стеммированные токены.
Следующий запрос API анализа анализа использует фильтр stemmer для создания стеммированных токенов для fox running and jumping.
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [ "stemmer" ],
"text": "fox running and jumping"
} Запрос генерирует следующие токены. Обратите внимание, что running было сведено до run, а jumping было сведено до jump.
[ fox, run, and, jump ]
Чтобы предотвратить сведение jumping, добавьте фильтр keyword_marker перед фильтром stemmer в предыдущем запросе API анализа. Укажите jumping в параметре keywords фильтра keyword_marker.
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "keyword_marker",
"keywords": [ "jumping" ]
},
"stemmer"
],
"text": "fox running and jumping"
} Запрос генерирует следующие токены. running по-прежнему сведен до run, но jumping не сведен.
[ fox, run, and, jumping ]
Чтобы увидеть атрибут keyword для этих токенов, добавьте следующие аргументы в запрос API анализа:
-
explain:true -
attributes:keyword
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "keyword_marker",
"keywords": [ "jumping" ]
},
"stemmer"
],
"text": "fox running and jumping",
"explain": true,
"attributes": "keyword"
} API возвращает следующий ответ. Обратите внимание, что токен jumping имеет атрибут keyword со значением true.
{
"detail": {
"custom_analyzer": true,
"charfilters": [],
"tokenizer": {
"name": "whitespace",
"tokens": [
{
"token": "fox",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "running",
"start_offset": 4,
"end_offset": 11,
"type": "word",
"position": 1
},
{
"token": "and",
"start_offset": 12,
"end_offset": 15,
"type": "word",
"position": 2
},
{
"token": "jumping",
"start_offset": 16,
"end_offset": 23,
"type": "word",
"position": 3
}
]
},
"tokenfilters": [
{
"name": "__anonymous__keyword_marker",
"tokens": [
{
"token": "fox",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0,
"keyword": false
},
{
"token": "running",
"start_offset": 4,
"end_offset": 11,
"type": "word",
"position": 1,
"keyword": false
},
{
"token": "and",
"start_offset": 12,
"end_offset": 15,
"type": "word",
"position": 2,
"keyword": false
},
{
"token": "jumping",
"start_offset": 16,
"end_offset": 23,
"type": "word",
"position": 3,
"keyword": true
}
]
},
{
"name": "stemmer",
"tokens": [
{
"token": "fox",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0,
"keyword": false
},
{
"token": "run",
"start_offset": 4,
"end_offset": 11,
"type": "word",
"position": 1,
"keyword": false
},
{
"token": "and",
"start_offset": 12,
"end_offset": 15,
"type": "word",
"position": 2,
"keyword": false
},
{
"token": "jumping",
"start_offset": 16,
"end_offset": 23,
"type": "word",
"position": 3,
"keyword": true
}
]
}
]
}
} Настраиваемые параметры
-
ignore_case - (Необязательно, булево) Если
true, соответствие для параметровkeywordsиkeywords_pathигнорирует регистр букв. По умолчанию значениеfalse. -
keywords -
(Обязательно*, массив строк) Массив ключевых слов. Токены, соответствующие этим ключевым словам, не подвергаются сведению.
Должен быть указан этот параметр,
keywords_pathилиkeywords_pattern. Вы не можете указать этот параметр иkeywords_pattern. -
keywords_path -
(Обязательно*, строка) Путь к файлу, содержащему список ключевых слов. Токены, соответствующие этим ключевым словам, не подвергаются сведению.
Этот путь должен быть абсолютным или относительным к расположению
config, а файл должен быть закодирован в UTF-8. Каждое слово в файле должно быть разделено переводом строки.Должен быть указан этот параметр,
keywordsилиkeywords_pattern. Вы не можете указать этот параметр иkeywords_pattern. -
keywords_pattern -
(Обязательно*, строка) Регулярное выражение Java, используемое для сопоставления токенов. Токены, соответствующие этому выражению, помечаются как ключевые и не подвергаются сведению.
Должен быть указан этот параметр,
keywordsилиkeywords_path. Вы не можете указать этот параметр иkeywordsилиkeywords_pattern.Плохо написанные регулярные выражения могут привести к медленной работе Elasticsearch или ошибкам переполнения стека, что приводит к внезапному завершению работы узла.
Настройка и добавление в анализатор
Чтобы настроить фильтр keyword_marker, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос API создания индекса создания индекса использует пользовательский фильтр keyword_marker и фильтр porter_stem для настройки нового пользовательского анализатора.
Пользовательский фильтр keyword_marker помечает токены, указанные в файле analysis/example_word_list.txt, как ключевые. Фильтр porter_stem не сводит эти токены.
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"my_custom_keyword_marker_filter",
"porter_stem"
]
}
},
"filter": {
"my_custom_keyword_marker_filter": {
"type": "keyword_marker",
"keywords_path": "analysis/example_word_list.txt"
}
}
}
}
}
© 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-keyword-marker-tokenfilter.html