Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Анализ текста ›Настройка анализа текста

Создание пользовательского анализатора

Когда встроенные анализаторы не удовлетворяют вашим потребностям, вы можете создать пользовательский анализатор, который использует соответствующую комбинацию:

  • нулевые или более фильтров символов
  • токеннизатор
  • нулевые или более фильтров токенов.

Настройка

Пользовательский анализатор принимает следующие параметры:

type

Тип анализатора. Принимает типы встроенных анализаторов. Для пользовательских анализаторов используйте custom или опустите этот параметр.

tokenizer

Встроенный или настраиваемый токеннизатор. (Обязательно)

char_filter

Необязательный массив встроенных или настраиваемых фильтров символов.

filter

Необязательный массив встроенных или настраиваемых фильтров токенов.

position_increment_gap

При индексировании массива текстовых значений Elasticsearch вставляет фальшивый «зазор» между последним термином одного значения и первым термином следующего значения, чтобы убедиться, что запрос по фразе не соответствует двум терминам из разных элементов массива. По умолчанию равно 100. Подробнее см. position_increment_gap.

Пример настройки

Вот пример, который объединяет следующее:

Фильтр символов
  • Фильтр символов HTML Strip
Токенизатор
  • Стандартный токенизатор
Фильтры токенов
  • Фильтр токенов Lowercase
  • Фильтр токенов ASCII-Folding
PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom", 
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "Is this <b>déjà vu</b>?"
}

Для custom анализаторов используйте type анализатора custom или опустите параметр type.

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

[ is, this, deja, vu ]

В предыдущем примере использовались токенизатор, фильтры токенов и фильтры символов с их значениями по умолчанию, но можно создать настроенные версии каждого из них и использовать их в пользовательском анализаторе.

Вот более сложный пример, который объединяет следующее:

Фильтр символов
  • Фильтр символов Mapping, настроенный для замены :) на _happy_ и :( на _sad_
Токенизатор
  • Токенизатор Pattern, настроенный для разделения по знакам препинания
Фильтры токенов
  • Фильтр токенов Lowercase
  • Фильтр токенов Stop, настроенный для использования предварительно определенного списка стоп-слов английского языка

Вот пример:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": { 
          "char_filter": [
            "emoticons"
          ],
          "tokenizer": "punctuation",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {
        "punctuation": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "I'm a :) person, and you?"
}

Назначает индексу пользовательский анализатор по умолчанию, my_custom_analyzer. Этот анализатор использует настраиваемый токенизатор, фильтр символов и фильтр токенов, которые определены позже в запросе. Этот анализатор также опускает параметр type.

Определяет пользовательский токенизатор punctuation.

Определяет пользовательский фильтр символов emoticons.

Определяет пользовательский фильтр токенов english_stop.

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

[ i'm, _happy_, person, you ]

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

Spec-Zone.ru

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