TOKENIZE
Описание
Функция TOKENIZE разбивает строку на токены с помощью указанного анализатора и возвращает результаты токенизации в виде массива строк в формате JSON. Эта функция особенно полезна для понимания того, как будет анализироваться текст при использовании инвертированных индексов для полнотекстового поиска.
Синтаксис
VARCHAR TOKENIZE(VARCHAR str, VARCHAR properties)
Параметры
str: Входная строка для токенизации. Тип:VARCHARproperties: Строка свойств, задающая конфигурацию анализатора. Тип:VARCHAR
Параметр properties поддерживает следующие пары «ключ — значение» (формат: "key1"="value1", "key2"="value2"):
Общие свойства
| Свойство | Описание | Примеры значений |
|---|---|---|
built_in_analyzer | Тип встроенного анализатора | "english", "chinese", "unicode", "icu", "basic", "ik", "standard", "none" |
analyzer | Имя пользовательского анализатора (созданного с помощью CREATE INVERTED INDEX ANALYZER) | "my_custom_analyzer" |
parser_mode | Режим парсера (для анализаторов китайского текста) | "fine_grained", "coarse_grained" |
support_phrase | Включение поддержки фраз (сохраняет информацию о позициях) | "true", "false" |
lower_case | Преобразование токенов в нижний регистр | "true", "false" |
char_filter_type | Тип символьного фильтра | Зависит от фильтра |
stop_words | Настройка стоп-слов | Зависит от реализации |
Возвращаемое значение
Возвращает значение типа VARCHAR, содержащее массив результатов токенизации в формате JSON. Каждый элемент массива представляет собой объект со следующей структурой:
token: Термин, полученный при токенизацииposition: (Необязательно) Индекс позиции токена, если включено свойствоsupport_phrase
Примеры
Пример 1: Использование встроенных анализаторов
-- Using the standard analyzer
SELECT TOKENIZE("Hello World", '"built_in_analyzer"="standard"');
[{ "token": "hello" }, { "token": "world" }]
-- Using the english analyzer
SELECT TOKENIZE("running quickly", '"built_in_analyzer"="english"');
[{ "token": "run" }, { "token": "quick" }]
-- Using the unicode analyzer with Chinese text
SELECT TOKENIZE("Apache Doris数据库", '"built_in_analyzer"="unicode"');
[{ "token": "apache" }, { "token": "doris" }, { "token": "数" }, { "token": "据" }, { "token": "库" }]
-- Using the chinese analyzer
SELECT TOKENIZE("我来到北京清华大学", '"built_in_analyzer"="chinese"');
[{ "token": "我" }, { "token": "来到" }, { "token": "北京" }, { "token": "清华大学" }]
-- Using the icu analyzer for multilingual text
SELECT TOKENIZE("Hello World 世界", '"built_in_analyzer"="icu"');
[{ "token": "hello" }, { "token": "world" }, {"token": "世界"}]
-- Using the basic analyzer
SELECT TOKENIZE("GET /images/hm_bg.jpg HTTP/1.0", '"built_in_analyzer"="basic"');
[{ "token": "get" }, { "token": "images" }, {"token": "hm"}, {"token": "bg"}, {"token": "jpg"}, {"token": "http"}, {"token": "1"}, {"token": "0"}]
-- Using the ik analyzer for Chinese text
SELECT TOKENIZE("中华人民共和国国歌", '"built_in_analyzer"="ik"');
[{ "token": "中华人民共和国" }, { "token": "国歌" }]
Пример 2: Использование пользовательских анализаторов
Сначала создайте пользовательский анализатор:
CREATE INVERTED INDEX ANALYZER lowercase_delimited
PROPERTIES (
"tokenizer" = "standard",
"token_filter" = "asciifolding, lowercase"
);
Затем используйте его с функцией TOKENIZE:
SELECT TOKENIZE("FOO-BAR", '"analyzer"="lowercase_delimited"');
[{ "token": "foo" }, { "token": "bar" }]
Пример 3: С поддержкой фраз (информация о позициях)
SELECT TOKENIZE("Hello World", '"built_in_analyzer"="standard", "support_phrase"="true"');
[{ "token": "hello", "position": 0 }, { "token": "world", "position": 1 }]
Примечания
-
Настройка анализатора: Параметр
propertiesдолжен содержать корректную строку свойств. Пользовательский анализатор необходимо предварительно создать с помощьюCREATE INVERTED INDEX ANALYZER. -
Поддерживаемые анализаторы: В настоящее время поддерживаются следующие встроенные анализаторы:
standard: Стандартный анализатор для текстов общего назначенияenglish: Анализатор английского языка со стеммингомchinese: Анализатор китайского текстаunicode: Анализатор на основе Unicode для многоязычного текстаicu: Анализатор на основе ICU для расширенной обработки Unicodebasic: Базовая токенизацияik: Анализатор IK для китайского текстаnone: Без токенизации (возвращает исходную строку в виде одного токена)
-
Производительность: Функция
TOKENIZEпредназначена прежде всего для тестирования и отладки конфигураций анализаторов. Для полнотекстового поиска в рабочей среде используйте инвертированные индексы с операторамиMATCHилиSEARCH. -
Вывод в формате JSON: Результат представляет собой форматированную строку JSON, которую при необходимости можно дополнительно обработать с помощью функций JSON.
-
Совместимость с инвертированными индексами: Ту же конфигурацию анализатора, которая используется в
TOKENIZE, можно применить к инвертированным индексам при создании таблиц:CREATE TABLE example (
content TEXT,
INDEX idx_content(content) USING INVERTED PROPERTIES("analyzer"="my_analyzer")
) -
Проверка работы анализатора: Используйте
TOKENIZE, чтобы заранее посмотреть, как текст будет разбит на токены, прежде чем создавать инвертированные индексы. Это поможет выбрать наиболее подходящий анализатор для ваших данных.
Связанные функции
- MATCH: Полнотекстовый поиск с использованием инвертированных индексов
- SEARCH: Расширенный поиск с поддержкой DSL
Ключевые слова
TOKENIZE, STRING, FULL-TEXT SEARCH, INVERTED INDEX, ANALYZER