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

Токенизатор Edge n-gram

Токенизатор edge_ngram сначала разбивает текст на слова, когда встречается один из указанных символов, затем он генерирует n-граммы каждого слова, где начало n-граммы привязано к началу слова.

Границы n-грамм полезны для запросов поиск по мере ввода.

Когда вам нужен поиск по мере ввода для текста, имеющего общеизвестный порядок, например, названия фильмов или песен, токенизатор Completion Suggester является гораздо более эффективным выбором, чем n-граммы с привязкой к началу слова. Токенизатор Edge n-grams имеет преимущество при попытке автозаполнения слов, которые могут появляться в любом порядке.

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

С настройками по умолчанию, токенизатор edge_ngram обрабатывает исходный текст как единый токен и генерирует n-граммы с минимальной длиной 1 и максимальной длиной 2:

POST _analyze
{
  "tokenizer": "edge_ngram",
  "text": "Quick Fox"
}

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

[ Q, Qu ]

Эти значения длин n-грамм по умолчанию практически бесполезны. Вам необходимо настроить параметр edge_ngram перед его использованием.

Настройка

Токенизатор edge_ngram принимает следующие параметры:

min_gram
Минимальная длина символов в n-грамме. По умолчанию равна 1.
max_gram

Максимальная длина символов в n-грамме. По умолчанию равна 2.

См. Ограничения параметра max_gram.

token_chars

Классы символов, которые должны быть включены в токен. Elasticsearch будет разбивать на символы, которые не относятся к указанным классам. По умолчанию равно [] (сохранить все символы).

Классы символов могут быть любыми из следующих:

  • letter — например a, b, ï или 京
  • digit — например 3 или 7
  • whitespace — например " " или "\n"
  • punctuation — например ! или "
  • symbol — например $ или √
  • custom — пользовательские символы, которые нужно установить с помощью параметра custom_token_chars.
custom_token_chars
Пользовательские символы, которые должны обрабатываться как часть токена. Например, установка этого значения на +-_ заставит токенизатор обрабатывать плюс, минус и знак подчеркивания как часть токена.

Ограничения параметра max_gram

Значение параметра max_gram токенизатора edge_ngram ограничивает длину символов токенов. При использовании токенизатора edge_ngram с анализатором индекса это означает, что поисковые термины, превышающие длину max_gram, могут не совпадать ни с одним индексированным термином.

Например, если значение max_gram равно 3, поиски apple не будут совпадать с индексированным термином app.

Чтобы учесть это, вы можете использовать токен-фильтр truncate с поисковым анализатором для укорочения поисковых терминов до длины max_gram символов. Однако это может привести к возврату нерелевантных результатов.

Например, если значение max_gram равно 3, и поисковые термины обрезаются до трех символов, то поисковый термин apple укорачивается до app. Это означает, что поиски apple возвращают любые индексированные термины, соответствующие app, такие как apply, approximate и apple.

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

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

В этом примере мы настраиваем токенизатор edge_ngram для обработки букв и цифр как токенов и для генерации n-грамм с минимальной длиной 2 и максимальной длиной 10:

PUT my-index-00001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }
}

POST my-index-00001/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}

Вышеприведенный пример генерирует следующие термины:

[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]

Обычно мы рекомендуем использовать тот же самый analyzer при индексировании и поиске. В случае токенизатора edge_ngram совет отличается. Имеет смысл использовать токенизатор edge_ngram только во время индексирования, чтобы гарантировать, что части слов доступны для сопоставления в индексе. При поиске просто ищите введенные пользователем термины, например: Quick Fo.

Ниже приведен пример того, как настроить поле для поиска по мере ввода.

Обратите внимание, что значение max_gram для анализатора индекса равно 10, что ограничивает индексированные термины 10 символами. Поисковые термины не обрезаются, что означает, что поисковые термины, превышающие 10 символов, могут не совпадать ни с одним индексированным термином.

PUT my-index-00001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete",
        "search_analyzer": "autocomplete_search"
      }
    }
  }
}

PUT my-index-00001/_doc/1
{
  "title": "Quick Foxes" 
}

POST my-index-00001/_refresh

GET my-index-00001/_search
{
  "query": {
    "match": {
      "title": {
        "query": "Quick Fo", 
        "operator": "and"
      }
    }
  }
}

Анализатор autocomplete индексирует термины [qu, qui, quic, quick, fo, fox, foxe, foxes].

Анализатор autocomplete_search ищет термины [quick, fo], оба из которых встречаются в индексе.

© 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-edgengram-tokenizer.html

Spec-Zone.ru

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