Фильтр токенов Word delimiter graph
Разделяет токены по неалфавитно-цифровым символам. Фильтр word_delimiter_graph также выполняет необязательную нормализацию токенов на основе набора правил. По умолчанию фильтр использует следующие правила:
- Разделяет токены по неалфавитно-цифровым символам. Фильтр использует эти символы в качестве разделителей. Например:
Super-Duper→Super,Duper - Удаляет ведущие или хвостовые разделители из каждого токена. Например:
XL---42+'Autocoder'→XL,42,Autocoder - Разделяет токены при переходе к другому регистру. Например:
PowerShot→Power,Shot - Разделяет токены при переходе от буквы к цифре. Например:
XL500→XL,500 - Удаляет английское притяжательное (
's) из конца каждого токена. Например:Neil's→Neil
Фильтр word_delimiter_graph использует Lucene’s WordDelimiterGraphFilter.
Фильтр word_delimiter_graph был разработан для удаления знаков препинания из сложных идентификаторов, таких как идентификаторы продуктов или номеров деталей. Для этих случаев рекомендуется использовать фильтр word_delimiter_graph с keyword токенизатором.
Избегайте использования фильтра word_delimiter_graph для разделения слов, соединённых дефисами, таких как wi-fi. Поскольку пользователи часто ищут эти слова как с дефисом, так и без него, рекомендуется использовать synonym_graph фильтр вместо него.
Пример
Следующий запрос API анализа использует фильтр word_delimiter_graph для разделения Neil's-Super-Duper-XL500--42+AutoCoder на нормализованные токены, используя стандартные правила фильтра:
GET /_analyze
{
"tokenizer": "keyword",
"filter": [ "word_delimiter_graph" ],
"text": "Neil's-Super-Duper-XL500--42+AutoCoder"
} Фильтр производит следующие токены:
[ Neil, Super, Duper, XL, 500, 42, Auto, Coder ]
Добавление в анализатор
Следующий запрос API создания индекса использует фильтр word_delimiter_graph для настройки нового пользовательского анализатора.
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "keyword",
"filter": [ "word_delimiter_graph" ]
}
}
}
}
} Избегайте использования фильтра word_delimiter_graph с токенизаторами, которые удаляют знаки препинания, например standard токенизатором. Это может помешать фильтру word_delimiter_graph правильно разделять токены. Это также может повлиять на настраиваемые параметры фильтра, такие как catenate_all или preserve_original. Вместо этого рекомендуется использовать keyword или whitespace токенизаторы.
Настраиваемые параметры
-
adjust_offsets -
(Необязательно, Булево) Если
true, фильтр корректирует смещения разделенных или склеенных токенов, чтобы лучше отразить их фактическое положение в потоке токенов. По умолчаниюtrue.Установите
adjust_offsetsвfalse, если ваш анализатор использует фильтры, такие как фильтрtrim, которые изменяют длину токенов, не изменяя их смещения. В противном случае, фильтрword_delimiter_graphможет создавать токены с некорректными смещениями.
-
catenate_all -
(Необязательно, Булево) Если
true, фильтр создаёт склеенные токены для цепочек буквенно-цифровых символов, разделённых небуквенно-цифровыми разделителями. Например:super-duper-xl-500→ [superduperxl500,super,duper,xl,500]. По умолчаниюfalse.Установка этого параметра в
trueсоздаёт токены с несколькими позициями, которые не поддерживаются индексированием.Если этот параметр
true, избегайте использования этого фильтра в индексном анализаторе или используйте фильтрflatten_graphпосле этого фильтра, чтобы сделать поток токенов подходящим для индексирования.При использовании для анализа поиска, склеенные токены могут вызвать проблемы для запроса
match_phraseи других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра вtrue, если вы планируете использовать эти запросы.
-
catenate_numbers -
(Необязательно, Булево) Если
true, фильтр создаёт склеенные токены для цепочек цифровых символов, разделённых небуквенно-цифровыми разделителями. Например:01-02-03→ [010203,01,02,03]. По умолчаниюfalse.Установка этого параметра в
trueсоздаёт токены с несколькими позициями, которые не поддерживаются индексированием.Если этот параметр
true, избегайте использования этого фильтра в индексном анализаторе или используйте фильтрflatten_graphпосле этого фильтра, чтобы сделать поток токенов подходящим для индексирования.При использовании для анализа поиска, склеенные токены могут вызвать проблемы для запроса
match_phraseи других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра вtrue, если вы планируете использовать эти запросы.
-
catenate_words -
(Необязательно, Булево) Если
true, фильтр создаёт склеенные токены для цепочек буквенных символов, разделённых небуквенно-цифровыми разделителями. Например:super-duper-xl→ [superduperxl,super,duper,xl]. По умолчаниюfalse.Установка этого параметра в
trueсоздаёт токены с несколькими позициями, которые не поддерживаются индексированием.Если этот параметр
true, избегайте использования этого фильтра в индексном анализаторе или используйте фильтрflatten_graphпосле этого фильтра, чтобы сделать поток токенов подходящим для индексирования.При использовании для анализа поиска, склеенные токены могут вызвать проблемы для запроса
match_phraseи других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра вtrue, если вы планируете использовать эти запросы. -
generate_number_parts - (Необязательно, Булево) Если
true, фильтр включает токены, состоящие только из цифровых символов, в выходные данные. Еслиfalse, фильтр исключает эти токены из выходных данных. По умолчаниюtrue. -
generate_word_parts - (Необязательно, Булево) Если
true, фильтр включает токены, состоящие только из буквенных символов, в выходные данные. Еслиfalse, фильтр исключает эти токены из выходных данных. По умолчаниюtrue. -
ignore_keywords - (Необязательно, Булево) Если
true, фильтр пропускает токены с атрибутомkeywordравнымtrue. По умолчаниюfalse.
-
preserve_original -
(Необязательно, Булево) Если
true, фильтр включает исходную версию любых разделенных токенов в выходные данные. Эта исходная версия включает не буквенно-цифровые разделители. Например:super-duper-xl-500→ [super-duper-xl-500,super,duper,xl,500]. По умолчаниюfalse.Установка этого параметра в
trueсоздаёт токены с несколькими позициями, которые не поддерживаются индексированием.Если этот параметр
true, избегайте использования этого фильтра в индексном анализаторе или используйте фильтрflatten_graphпосле этого фильтра, чтобы сделать поток токенов подходящим для индексирования. -
protected_words - (Необязательно, массив строк) Массив токенов, которые фильтр не будет разделять.
-
protected_words_path -
(Необязательно, строка) Путь к файлу, содержащему список токенов, которые фильтр не будет разделять.
Этот путь должен быть абсолютным или относительным к местоположению
config, а файл должен быть закодирован в UTF-8. Каждый токен в файле должен быть разделен символом перевода строки. -
split_on_case_change - (Необязательно, Булево) Если
true, фильтр разделяет токены при переходе между прописными и строчными буквами. Например:camelCase→ [camel,Case]. По умолчаниюtrue. -
split_on_numerics - (Необязательно, Булево) Если
true, фильтр разделяет токены при переходе между буквами и цифрами. Например:j2se→ [j,2,se]. По умолчаниюtrue. -
stem_english_possessive - (Необязательно, Булево) Если
true, фильтр удаляет английский притяжательный падеж ('s) с конца каждого токена. Например:O'Neil's→ [O,Neil]. По умолчаниюtrue. -
type_table -
(Необязательно, массив строк) Массив пользовательских сопоставлений типов для символов. Это позволяет сопоставить не буквенно-цифровые символы как цифровые или буквенно-цифровые, чтобы избежать разделения на эти символы.
Например, следующий массив сопоставляет символы плюс (
+) и минус (-) как буквенно-цифровые, что означает, что они не будут рассматриваться как разделители:[ "+ => ALPHA", "- => ALPHA" ]Поддерживаемые типы включают:
-
ALPHA(Буквенный) -
ALPHANUM(Буквенно-цифровой) -
DIGIT(Цифровой) -
LOWER(Строчные буквы) -
SUBWORD_DELIM(Разделитель не буквенно-цифровой) -
UPPER(Прописные буквы)
-
-
type_table_path -
(Необязательно, строка) Путь к файлу, содержащему пользовательские сопоставления типов для символов. Например, содержимое этого файла может содержать следующее:
# Map the $, %, '.', and ',' characters to DIGIT # This might be useful for financial data. $ => DIGIT % => DIGIT . => DIGIT \\u002C => DIGIT # in some cases you might not want to split on ZWJ # this also tests the case where we need a bigger byte[] # see https://en.wikipedia.org/wiki/Zero-width_joiner \\u200D => ALPHANUM
Поддерживаемые типы включают:
-
ALPHA(Буквенный) -
ALPHANUM(Буквенно-цифровой) -
DIGIT(Цифровой) -
LOWER(Строчные буквы) -
SUBWORD_DELIM(Разделитель не буквенно-цифровой) -
UPPER(Прописные буквы)
Этот путь к файлу должен быть абсолютным или относительным к местоположению
config, и файл должен быть закодирован в UTF-8. Каждое сопоставление в файле должно быть разделено символом перевода строки. -
Настройка
Для настройки фильтра word_delimiter_graph, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос создает фильтр word_delimiter_graph, который использует следующие правила:
- Разделять токены на небуквенно-цифровые символы, кроме символа тире (
-). - Удалять начальные или конечные разделители из каждого токена.
- Не разделять токены на переходы между регистрами букв.
- Не разделять токены на переходы между буквами и цифрами.
- Удалять английский притяжательный падеж (
's) из конца каждого токена.
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "keyword",
"filter": [ "my_custom_word_delimiter_graph_filter" ]
}
},
"filter": {
"my_custom_word_delimiter_graph_filter": {
"type": "word_delimiter_graph",
"type_table": [ "- => ALPHA" ],
"split_on_case_change": false,
"split_on_numerics": false,
"stem_english_possessive": true
}
}
}
}
} Различия между word_delimiter_graph и word_delimiter
Оба фильтра word_delimiter_graph и word_delimiter генерируют токены, охватывающие несколько позиций, когда любые из следующих параметров заданы true:
Однако, только фильтр word_delimiter_graph назначает токенам, охватывающим несколько позиций, атрибут positionLength, который указывает количество позиций, охватываемых токеном. Это гарантирует, что фильтр word_delimiter_graph всегда генерирует корректные графы токенов.
Фильтр word_delimiter не назначает токенам, охватывающим несколько позиций, атрибут positionLength. Это означает, что он генерирует некорректные графы для потоков, включающих эти токены.
Хотя индексация не поддерживает графы токенов, содержащие токены, охватывающие несколько позиций, запросы, такие как запрос match_phrase, могут использовать эти графы для генерации нескольких подзапросов из одной строки запроса.
Чтобы увидеть, как отличаются графы токенов, созданные фильтрами word_delimiter и word_delimiter_graph, рассмотрите следующий пример.
Пример
Базовый граф токенов
И word_delimiter, и word_delimiter_graph создают следующий граф токенов для PowerShot2000, когда указаны следующие параметры false:
Этот граф не содержит токенов, охватывающих несколько позиций. Все токены охватывают только одну позицию.
Граф word_delimiter_graph с токеном, охватывающим несколько позиций
Фильтр word_delimiter_graph генерирует следующий граф токенов для PowerShot2000, когда catenate_words задан как true.
Этот граф правильно указывает, что токен PowerShot, образованный конкатенацией, охватывает две позиции.
Граф word_delimiter с токеном, охватывающим несколько позиций
Когда catenate_words задан как true, фильтр word_delimiter генерирует следующий граф токенов для PowerShot2000.
Обратите внимание, что токен PowerShot, образованный конкатенацией, должен охватывать две позиции, но в графе токенов он охватывает только одну, что делает его некорректным.
© 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-word-delimiter-graph-tokenfilter.html