FT.CREATE
FT.CREATE — это команда языка запросов модуля RediSearch для системы управления базами данных Redis, предназначенная для создания полнотекстового индекса. Команда определяет структуру индекса, поля для поиска, типы данных и параметры токенизации, позволяя выполнять сложные текстовые запросы к данным, хранящимся в Redis.
История и контекст
RediSearch — это модуль с открытым исходным кодом, разработанный компанией Redis Ltd. (организация признана в РФ нежелательной, деятельность запрещена). Он был выпущен в 2016 году как расширение для Redis, добавляющее возможности полнотекстового поиска. До появления RediSearch Redis не поддерживал нативные механизмы поиска по тексту, ограничиваясь простыми операциями по ключам. Команда FT.CREATE стала основным инструментом для инициализации индексов, без которого невозможно использование поисковых функций модуля. С момента выхода RediSearch версии 1.0 команда претерпела несколько изменений: были добавлены поддержка векторного поиска, возможность индексации полей JSON, а также улучшена работа с кириллицей и другими нелатинскими алфавитами.
Синтаксис и параметры
Команда FT.CREATE имеет следующий синтаксис:
`` FT.CREATE index_name [ON HASH | JSON] [PREFIX count prefix [prefix ...]] [LANGUAGE lang] [LANGUAGE_FIELD field] [SCORE score] [SCORE_FIELD field] [PAYLOAD_FIELD field] [MAXTEXTFIELDS] [TEMPORARY seconds] [NOOFFSETS] [NOHL] [NOFIELDS] [NOFREQS] [SKIPINITIALSCAN] [STOPWORDS count [stopword ...]] SCHEMA field_name [AS alias] [TEXT | NUMERIC | GEO | TAG | VECTOR] [SORTABLE] [NOINDEX] [options] ... ``
Основные параметры
- index_name — уникальное имя индекса, по которому он будет идентифицироваться в запросах.
- ON HASH | JSON — указывает тип данных Redis, которые будут индексироваться. По умолчанию используется HASH (хэши). С версии 2.0 поддерживается JSON.
- PREFIX — задаёт префиксы ключей, которые будут включены в индекс. Например,
PREFIX 2 "doc:" "blog:"означает, что индексируются все ключи, начинающиеся сdoc:илиblog:. - LANGUAGE — язык текста для стемминга (например,
russian,english). По умолчанию —english. - SCORE — числовая оценка по умолчанию для всех документов в индексе (от 0 до 1). Используется для ранжирования результатов.
- STOPWORDS — список стоп-слов, которые игнорируются при индексации. Можно задать свой список или использовать
STOPWORDS 0для отключения стоп-слов. - SCHEMA — описание полей индекса. Каждое поле имеет имя, тип и опциональные атрибуты.
Типы полей в схеме
- TEXT — текстовое поле для полнотекстового поиска. Поддерживает стемминг, поиск по фразам, нечёткий поиск. Атрибуты:
WEIGHT(вес поля при ранжировании),NOSTEM(отключение стемминга),PHONETIC(фонетический поиск). - NUMERIC — числовое поле для фильтрации и сортировки по числам (целые и дробные).
- GEO — географическое поле, хранящее координаты в формате
"latitude,longitude". Позволяет выполнять поиск по радиусу. - TAG — поле для точного совпадения по тегам (например, категории, идентификаторы). Поддерживает разделители и чувствительность к регистру.
- VECTOR — векторное поле для семантического поиска (с версии 2.4). Требует указания алгоритма (FLAT, HNSW) и размерности вектора.
Пример использования
Создание индекса для поиска по хэшам, содержащим статьи:
`` FT.CREATE articles_idx ON HASH PREFIX 1 "article:" LANGUAGE russian SCHEMA title TEXT WEIGHT 2.0 body TEXT author TAG sortable date NUMERIC ``
Этот индекс будет индексировать все ключи, начинающиеся с article:, использовать русский стемминг, искать по полям title (с удвоенным весом), body, author (как тег с возможностью сортировки) и date (как число).
Применение
Команда FT.CREATE используется в системах, где требуется быстрый поиск по неструктурированным или полуструктурированным данным, хранящимся в Redis. Основные сценарии:
- Поиск по документам — индексация текстов статей, описаний товаров, комментариев.
- Геопоиск — поиск объектов в заданном радиусе (например, ближайшие рестораны).
- Фильтрация по тегам и числам — комбинирование текстового поиска с фильтрацией по категориям, цене, дате.
- Векторный поиск — семантический поиск изображений или текстов (с версии 2.4).
Ограничения и особенности
- Индекс создаётся в оперативной памяти, что обеспечивает высокую скорость, но накладывает ограничения на объём данных (зависит от доступной RAM).
- Команда
FT.CREATEне поддерживает изменение схемы после создания индекса. Для изменения полей необходимо удалить индекс (FT.DROPINDEX) и создать заново. - При использовании
ON HASHиндексация происходит асинхронно: новые или изменённые хэши автоматически попадают в индекс, но с небольшой задержкой. - Для работы с кириллицей требуется указать язык
russianи убедиться, что модуль собран с поддержкой Unicode.
Сравнение с альтернативами
В отличие от специализированных поисковых систем (Elasticsearch, Solr), RediSearch с командой FT.CREATE ориентирован на лёгкость интеграции с Redis и минимальную задержку. Однако он уступает в функциональности (например, отсутствие агрегаций, сложных анализаторов) и масштабируемости на больших объёмах данных. Для простых поисковых задач в микросервисной архитектуре FT.CREATE является эффективным решением.
Источники
- Документация RediSearch: «RediSearch Quick Start» (Redis Ltd.)
- Официальная спецификация команды FT.CREATE (Redis.io)
- Статья «Full-Text Search with Redis» на Medium (2019)
- Redis Ltd. — организация признана в РФ нежелательной, деятельность запрещена.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →