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

Фильтр токенов Shingle

Добавляет шинглы, или слово n-граммы, в поток токенов, конкатенируя смежные токены. По умолчанию, фильтр токенов shingle выводит шинглы из двух слов и униграммы.

Например, многие токенизаторы преобразуют the lazy dog в [ the, lazy, dog ]. Вы можете использовать фильтр shingle, чтобы добавить шинглы из двух слов в этот поток: [ the, the lazy, lazy, lazy dog, dog ].

Шинглы часто используются для ускорения запросов по фразам, таких как match_phrase. Вместо создания шинглов с помощью фильтра shingles, мы рекомендуем использовать параметр index-phrases для соответствующего поля text вместо этого.

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

Пример

Следующий запрос анализа API использует фильтр shingle, чтобы добавить шинглы из двух слов в поток токенов для quick brown fox jumps:

GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [ "shingle" ],
  "text": "quick brown fox jumps"
}

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

[ quick, quick brown, brown, brown fox, fox, fox jumps, jumps ]

Для получения шинглов из 2-3 слов, добавьте следующие аргументы в запрос анализа API:

  • min_shingle_size: 2
  • max_shingle_size: 3
GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "shingle",
      "min_shingle_size": 2,
      "max_shingle_size": 3
    }
  ],
  "text": "quick brown fox jumps"
}

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

[ quick, quick brown, quick brown fox, brown, brown fox, brown fox jumps, fox, fox jumps, jumps ]

Чтобы включить только шинглы в выходные данные, добавьте аргумент output_unigrams со значением false в запрос.

GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "shingle",
      "min_shingle_size": 2,
      "max_shingle_size": 3,
      "output_unigrams": false
    }
  ],
  "text": "quick brown fox jumps"
}

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

[ quick brown, quick brown fox, brown fox, brown fox jumps, fox jumps ]

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

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

PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_shingle": {
          "tokenizer": "standard",
          "filter": [ "shingle" ]
        }
      }
    }
  }
}

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

max_shingle_size

(Необязательно, целое число) Максимальное количество токенов для конкатенации при создании шинглов. По умолчанию равно 2.

Это значение не может быть меньше значения аргумента min_shingle_size, которое по умолчанию равно 2. Разница между этим значением и аргументом min_shingle_size не может превышать значение параметра index.max_shingle_diff на уровне индекса, которое по умолчанию равно 3.

min_shingle_size

(Необязательно, целое число) Минимальное количество токенов для конкатенации при создании шинглов. По умолчанию равно 2.

Это значение не может превышать значение аргумента max_shingle_size, которое по умолчанию равно 2. Разница между аргументом max_shingle_size и этим значением не может превышать значение параметра index.max_shingle_diff на уровне индекса, которое по умолчанию равно 3.

output_unigrams
(Необязательно, Булево) Если true, выходные данные включают исходные входные токены. Если false, выходные данные включают только шинглы; исходные входные токены удаляются. По умолчанию равно true.
output_unigrams_if_no_shingles

Если true, выходные данные включают исходные входные токены только если не созданы шинглы; если шинглы созданы, выходные данные содержат только шинглы. По умолчанию равно false.

Если оба параметра, этот и output_unigrams, равны true, используется только аргумент output_unigrams.

token_separator
(Необязательно, строка) Разделитель, используемый для конкатенации смежных токенов для формирования шингла. По умолчанию пробел (" ").
filler_token

(Необязательно, строка) Строка, используемая в шинглах для замены пустых позиций, не содержащих токен. Этот заполняющий токен используется только в шинглах, а не в исходных униграммах. По умолчанию нижнее подчеркивание (_).

Некоторые фильтры токенов, такие как фильтр stop, создают пустые позиции при удалении стоп-слов с позиционным инкрементом больше одного.

Пример

В следующем запросе анализа API, фильтр stop удаляет стоп-слово a из fox jumps a lazy dog, создавая пустую позицию. Последующий фильтр shingle заменяет эту пустую позицию знаком плюс (+) в шинглах.

GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "stop",
      "stopwords": [ "a" ]
    },
    {
      "type": "shingle",
      "filler_token": "+"
    }
  ],
  "text": "fox jumps a lazy dog"
}

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

[ fox, fox jumps, jumps, jumps +, + lazy, lazy, lazy dog, dog ]

Настройка

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

Например, следующий запрос создания индекса API использует пользовательский фильтр shingle, my_shingle_filter, для настройки нового пользовательского анализатора.

Фильтр my_shingle_filter использует min_shingle_size равный 2 и max_shingle_size равный 5, что означает, что он генерирует шинглы из 2-5 слов. Фильтр также использует аргумент output_unigrams со значением false, означающее, что в выходных данных содержатся только шинглы.

PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "en": {
          "tokenizer": "standard",
          "filter": [ "my_shingle_filter" ]
        }
      },
      "filter": {
        "my_shingle_filter": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 5,
          "output_unigrams": 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/7.17/analysis-shingle-tokenfilter.html

Spec-Zone.ru

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