Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Анализ текста ›Справочник по фильтрам токенов

Фильтр токенов Pattern replace

Использует регулярное выражение для поиска и замены подстрок токенов.

Фильтр pattern_replace использует синтаксис регулярных выражений Java. По умолчанию фильтр заменяет совпадающие подстроки пустой подстрокой (""). Подстроки замены могут использовать синтаксис Java для замены, чтобы ссылаться на группы захвата из исходного текста токена.

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

Узнайте больше о патологических регулярных выражениях и способах их избежания.

Этот фильтр использует PatternReplaceFilter из Lucene.

Пример

Следующий запрос API анализа использует фильтр pattern_replace для добавления префикса watch к подстроке dog в foxes jump lazy dogs.

resp = client.indices.analyze(
    tokenizer="whitespace",
    filter=[
        {
            "type": "pattern_replace",
            "pattern": "(dog)",
            "replacement": "watch$1"
        }
    ],
    text="foxes jump lazy dogs",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'whitespace',
    filter: [
      {
        type: 'pattern_replace',
        pattern: '(dog)',
        replacement: 'watch$1'
      }
    ],
    text: 'foxes jump lazy dogs'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "whitespace",
  filter: [
    {
      type: "pattern_replace",
      pattern: "(dog)",
      replacement: "watch$1",
    },
  ],
  text: "foxes jump lazy dogs",
});
console.log(response);
GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "pattern_replace",
      "pattern": "(dog)",
      "replacement": "watch$1"
    }
  ],
  "text": "foxes jump lazy dogs"
}

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

[ foxes, jump, lazy, watchdogs ]

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

all
(Необязательно, логическое значение) Если true, все подстроки, соответствующие регулярному выражению параметра pattern, заменяются. Если false, фильтр заменяет только первую соответствующую подстроку в каждом токене. По умолчанию true.
pattern
(Обязательно, строка) Регулярное выражение, записанное в синтаксисе регулярных выражений Java. Фильтр заменяет подстроки токенов, соответствующие этому шаблону, подстрокой в параметре replacement.
replacement
(Необязательно, строка) Подстрока замены. По умолчанию пустая подстрока ("").

Настройка и добавление в анализатор

Для настройки фильтра pattern_replace, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.

Следующий запрос API создания индекса настраивает новый пользовательский анализатор с помощью пользовательского фильтра pattern_replace, my_pattern_replace_filter.

Фильтр my_pattern_replace_filter использует регулярное выражение [£|€] для поиска и удаления символов валюты £ и €. Параметр all фильтра равен false, что означает, что удаляется только первый соответствующий символ в каждом токене.

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "my_analyzer": {
                    "tokenizer": "keyword",
                    "filter": [
                        "my_pattern_replace_filter"
                    ]
                }
            },
            "filter": {
                "my_pattern_replace_filter": {
                    "type": "pattern_replace",
                    "pattern": "[£|€]",
                    "replacement": "",
                    "all": False
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_analyzer: {
            tokenizer: 'keyword',
            filter: [
              'my_pattern_replace_filter'
            ]
          }
        },
        filter: {
          my_pattern_replace_filter: {
            type: 'pattern_replace',
            pattern: '[£|€]',
            replacement: '',
            all: false
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        my_analyzer: {
          tokenizer: "keyword",
          filter: ["my_pattern_replace_filter"],
        },
      },
      filter: {
        my_pattern_replace_filter: {
          type: "pattern_replace",
          pattern: "[£|€]",
          replacement: "",
          all: false,
        },
      },
    },
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "filter": [
            "my_pattern_replace_filter"
          ]
        }
      },
      "filter": {
        "my_pattern_replace_filter": {
          "type": "pattern_replace",
          "pattern": "[£|€]",
          "replacement": "",
          "all": false
        }
      }
    }
  }
}

© 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/8.17/analysis-pattern_replace-tokenfilter.html

Spec-Zone.ru

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