Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Анализ текста ›Справочник по фильтрам токенов

Фильтр токенов разделитель слов

Рекомендуется использовать word_delimiter_graph вместо фильтра word_delimiter.

Фильтр word_delimiter может создавать недопустимые графы токенов. См. Различия между word_delimiter_graph и word_delimiter.

Фильтр word_delimiter также использует устаревший фильтр Lucene WordDelimiterFilter.

Разделяет токены на основе неалфавитно-цифровых символов. Фильтр word_delimiter также выполняет необязательную нормализацию токенов на основе набора правил. По умолчанию фильтр использует следующие правила:

  • Разделяет токены на неалфавитно-цифровые символы. Фильтр использует эти символы в качестве разделителей. Например: Super-Duper → Super, Duper
  • Удаляет начальные и конечные разделители каждого токена. Например: XL---42+'Autocoder' → XL, 42, Autocoder
  • Разделяет токены на переходы между регистрами букв. Например: PowerShot → Power, Shot
  • Разделяет токены на переходы между буквами и цифрами. Например: XL500 → XL, 500
  • Удаляет английские притяжательные окончания ('s) из конца каждого токена. Например: Neil's → Neil

Фильтр word_delimiter был разработан для удаления знаков препинания из сложных идентификаторов, таких как идентификаторы продуктов или номеры деталей. Для этих случаев рекомендуется использовать фильтр word_delimiter с токенизатором keyword.

Избегайте использования фильтра word_delimiter для разделения слов с дефисами, таких как wi-fi. Поскольку пользователи часто ищут эти слова как с дефисом, так и без него, рекомендуется использовать фильтр synonym_graph вместо него.

Пример

Следующий запрос API анализа использует фильтр word_delimiter для разделения Neil's-Super-Duper-XL500--42+AutoCoder на нормализованные токены, используя стандартные правила фильтра:

GET /_analyze
{
  "tokenizer": "keyword",
  "filter": [ "word_delimiter" ],
  "text": "Neil's-Super-Duper-XL500--42+AutoCoder"
}

Фильтр генерирует следующие токены:

[ Neil, Super, Duper, XL, 500, 42, Auto, Coder ]

Добавление в анализатор

Следующий запрос API создания индекса использует фильтр word_delimiter для конфигурации нового пользовательского анализатора.

PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "filter": [ "word_delimiter" ]
        }
      }
    }
  }
}

Избегайте использования фильтра word_delimiter с токенизаторами, которые удаляют знаки препинания, например, с токенизатором standard. Это может помешать фильтру word_delimiter правильно разделять токены. Также это может повлиять на настраиваемые параметры фильтра, такие как catenate_all или preserve_original. Рекомендуется использовать токенизатор keyword или whitespace вместо него.

Настраиваемые параметры

catenate_all

(Необязательно, Булево) Если true, фильтр создаёт склеенные токены для цепочек буквенно-цифровых символов, разделённых небуквенно-цифровыми разделителями. Например: super-duper-xl-500 → [ super, superduperxl500, duper, xl, 500 ]. По умолчанию false.

При использовании для анализа поиска склеенные токены могут вызвать проблемы для запроса match_phrase и других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра на true, если вы планируете использовать эти запросы.

catenate_numbers

(Необязательно, Булево) Если true, фильтр создаёт склеенные токены для цепочек цифровых символов, разделённых небуквенно-цифровыми разделителями. Например: 01-02-03 → [ 01, 010203, 02, 03 ]. По умолчанию false.

При использовании для анализа поиска склеенные токены могут вызвать проблемы для запроса match_phrase и других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра на true, если вы планируете использовать эти запросы.

catenate_words

(Необязательно, Булево) Если true, фильтр создаёт склеенные токены для цепочек буквенных символов, разделённых небуквенно-цифровыми разделителями. Например: super-duper-xl → [ super, superduperxl, duper, xl ]. По умолчанию false.

При использовании для анализа поиска склеенные токены могут вызвать проблемы для запроса match_phrase и других запросов, которые полагаются на позицию токенов для сопоставления. Избегайте установки этого параметра на true, если вы планируете использовать эти запросы.

generate_number_parts
(Необязательно, Булево) Если true, фильтр включает в выходные данные токены, состоящие только из цифровых символов. Если false, фильтр исключает эти токены из выходных данных. По умолчанию true.
generate_word_parts
(Необязательно, Булево) Если true, фильтр включает в выходные данные токены, состоящие только из буквенных символов. Если false, фильтр исключает эти токены из выходных данных. По умолчанию true.
preserve_original
(Необязательно, Булево) Если true, фильтр включает в выходные данные исходную версию любых разделенных токенов. Эта исходная версия включает небуквенно-цифровые разделители. Например: super-duper-xl-500 → [ super-duper-xl-500, super, duper, xl, 500 ]. По умолчанию false.
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, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.

Например, следующий запрос создаёт фильтр word_delimiter, который использует следующие правила:

  • Разделять токены на небуквенно-цифровые символы, кроме символа тире (-).
  • Удалять начальные или конечные разделители из каждого токена.
  • Не разделять токены на переходах регистров.
  • Не разделять токены на переходах между буквами и цифрами.
  • Удалять английский притяжательный падеж ('s) с конца каждого токена.
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "filter": [ "my_custom_word_delimiter_filter" ]
        }
      },
      "filter": {
        "my_custom_word_delimiter_filter": {
          "type": "word_delimiter",
          "type_table": [ "- => ALPHA" ],
          "split_on_case_change": false,
          "split_on_numerics": false,
          "stem_english_possessive": true
        }
      }
    }
  }
}

© 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-tokenfilter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API