Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Анализ текста ›Справочник встроенных анализаторов

Анализатор Pattern

Анализатор pattern использует регулярное выражение для разделения текста на термины. Регулярное выражение должно соответствовать разделителям токенов, а не самим токенам. Регулярное выражение по умолчанию равно \W+ (или все символы, не являющиеся словами).

Осторожно с патологическими регулярными выражениями

Анализатор pattern использует регулярные выражения Java.

Плохо написанное регулярное выражение может работать очень медленно или даже выбросить ошибку StackOverflowError, что приведёт к внезапному выходу узла, на котором оно выполняется.

Подробнее о патологических регулярных выражениях и способах их предотвращения.

Пример вывода

POST _analyze
{
  "analyzer": "pattern",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Вышеприведенное предложение даст следующие термины:

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

Настройка

Анализатор pattern принимает следующие параметры:

pattern

Регулярное выражение Java, по умолчанию равно \W+.

flags

Флаги регулярного выражения Java. Флаги должны быть разделены символом «|», например, "CASE_INSENSITIVE|COMMENTS".

lowercase

Необходимо ли преобразовывать термины в нижний регистр. По умолчанию равно true.

stopwords

Список стоп-слов, такой как _english_, или массив, содержащий список стоп-слов. По умолчанию равно _none_.

stopwords_path

Путь к файлу, содержащему стоп-слова.

См. Фильтр токенов Stop для получения дополнительной информации о настройке стоп-слов.

Пример конфигурации

В этом примере мы настраиваем анализатор pattern для разделения адресов электронной почты на символы, не являющиеся словами, или на символы подчеркивания (\W|_), и для приведения результата к нижнему регистру:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_email_analyzer": {
          "type":      "pattern",
          "pattern":   "\\W|_", 
          "lowercase": true
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_email_analyzer",
  "text": "John_Smith@foo-bar.com"
}

Обратные слэши в шаблоне необходимо экранировать при указании шаблона в виде строки JSON.

Вышеуказанный пример создаёт следующие термины:

[ john, smith, foo, bar, com ]

Токенизатор CamelCase

Следующий более сложный пример разделяет текст CamelCase на токены:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "camel": {
          "type": "pattern",
          "pattern": "([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=[\\p{L}&&[^\\p{Lu}]])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{L}&&[^\\p{Lu}]])"
        }
      }
    }
  }
}

GET my-index-000001/_analyze
{
  "analyzer": "camel",
  "text": "MooseX::FTPClass2_beta"
}

Вышеуказанный пример создаёт следующие термины:

[ moose, x, ftp, class, 2, beta ]

Вышеприведенное регулярное выражение проще понять как:

  ([^\p{L}\d]+)                 # swallow non letters and numbers,
| (?<=\D)(?=\d)                 # or non-number followed by number,
| (?<=\d)(?=\D)                 # or number followed by non-number,
| (?<=[ \p{L} && [^\p{Lu}]])    # or lower case
  (?=\p{Lu})                    #   followed by upper case,
| (?<=\p{Lu})                   # or upper case
  (?=\p{Lu}                     #   followed by upper case
    [\p{L}&&[^\p{Lu}]]          #   then lower case
  )

Определение

Анализатор pattern состоит из:

Токенизатор
  • Токенизатор Pattern
Фильтры токенов
  • Фильтр токенов Lower Case
  • Фильтр токенов Stop (по умолчанию отключен)

Если вам нужно настроить анализатор pattern сверх параметров конфигурации, вам нужно пересоздать его как анализатор custom и изменить его, обычно добавив фильтры токенов. Это позволит пересоздать встроенный анализатор pattern, и вы можете использовать его в качестве отправной точки для дальнейшей настройки:

PUT /pattern_example
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "split_on_non_word": {
          "type":       "pattern",
          "pattern":    "\\W+" 
        }
      },
      "analyzer": {
        "rebuilt_pattern": {
          "tokenizer": "split_on_non_word",
          "filter": [
            "lowercase"       
          ]
        }
      }
    }
  }
}

Шаблон по умолчанию — \W+, который разделяет символы, не являющиеся словами, и здесь вы можете его изменить.

Вы можете добавить другие фильтры токенов после lowercase.

© 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-pattern-analyzer.html

Spec-Zone.ru

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