FT.CREATE
FT.CREATE
FT.CREATE index
[ON HASH | JSON]
[PREFIX count prefix [prefix ...]]
[FILTER {filter}]
[LANGUAGE default_lang]
[LANGUAGE_FIELD lang_attribute]
[SCORE default_score]
[SCORE_FIELD score_attribute]
[PAYLOAD_FIELD payload_attribute]
[MAXTEXTFIELDS]
[TEMPORARY seconds]
[NOOFFSETS]
[NOHL]
[NOFIELDS]
[NOFREQS]
[STOPWORDS count [stopword ...]]
[SKIPINITIALSCAN]
SCHEMA field_name [AS alias] TEXT | TAG | NUMERIC | GEO | VECTOR [ SORTABLE [UNF]]
[NOINDEX] [ field_name [AS alias] TEXT | TAG | NUMERIC | GEO | VECTOR [ SORTABLE [UNF]] [NOINDEX] ...]
- Доступно в:
- Redis Stack / Поиск 1.0.0
- Сложность по времени:
- O(K) при создании, где K — количество полей; O(N), если происходит сканирование пространства ключей, где N — количество ключей в пространстве ключей
Описание
Создает индекс с заданными характеристиками. Для использования, см. Примеры.
Обязательные аргументы
indexимя индекса для создания. Если индекс существует, старая спецификация перезаписывается.
SCHEMA {identifier} AS {attribute} {attribute type} {options...после ключевого слова SCHEMA объявляет, какие поля индексировать:
-
{identifier}для хешей, это имя поля внутри хеша. Для JSON идентификатор — выражение JSON Path. -
AS {attribute}определяет атрибут, связанный с идентификатором. Например, вы можете использовать эту функцию для присвоения более запоминающегося (и проще набираемого) имени сложному выражению JSONPath.
Типы полей:
-
TEXT— позволяет выполнять запросы полнотекстового поиска по значению в этом атрибуте. -
TAG— позволяет выполнять запросы точного совпадения, такие как категории или первичные ключи, по значению в этом атрибуте. Для получения дополнительной информации см. Поля тегов. -
NUMERIC— позволяет выполнять числовые запросы по диапазонам по значению в этом атрибуте. Подробнее о том, как использовать числовые диапазоны, см. документацию по синтаксису запросов. -
GEO— позволяет выполнять геолокационные запросы по диапазонам по значению в этом атрибуте. Значение атрибута должно быть строкой, содержащей долготу (первое значение) и широту, разделенные запятой. -
VECTOR— позволяет выполнять запросы векторной схожести по значению в этом атрибуте. Для получения дополнительной информации см. Векторные поля.
Опции полей:
-
SORTABLE— атрибутыNUMERIC,TAG,TEXT, илиGEOмогут иметь необязательный аргумент SORTABLE. Поскольку пользователь сортирует результаты по значению этого атрибута, результаты доступны с очень низкой задержкой. Обратите внимание, что это добавляет издержки на память, поэтому не стоит объявлять его для больших текстовых атрибутов. Вы можете отсортировать атрибут без опцииSORTABLE, но задержка не будет такой хорошей, как сSORTABLE. -
UNF— По умолчанию для хешей (не для JSON)SORTABLEприменяется нормализация к индексируемому значению (символы приводятся к нижнему регистру, удаляются диакритики). При использовании ненормализованной формы (UNF) можно отключить нормализацию и сохранить исходную форму значения. Для JSONUNFподразумевается вместе сSORTABLE(нормализация отключена). -
NOSTEM— Текстовые атрибуты могут иметь аргумент NOSTEM, который отключает стеминг при индексировании его значений. Это может быть полезно для таких вещей, как имена собственные. -
NOINDEX— Атрибуты могут иметь опциюNOINDEX, что означает, что они не будут индексироваться. Это полезно в сочетании сSORTABLE, для создания атрибутов, чьи обновления с помощью PARTIAL не вызовут полной переиндексации документа. Если атрибут имеет NOINDEX и не имеет SORTABLE, он просто будет пропущен индексом. -
PHONETIC {matcher}— Объявление текстового атрибута какPHONETICвыполнит фонетический поиск по нему в запросах по умолчанию. Обязательный аргумент {matcher} указывает используемый фонетический алгоритм и язык. Поддерживаются следующие матчеры:-
dm:en— Двойное метафон для английского языка -
dm:fr— Двойное метафон для французского языка -
dm:pt— Двойное метафон для португальского языка -
dm:es— Двойное метафон для испанского языка
Для получения дополнительной информации см. Фонетический поиск.
-
-
WEIGHT {weight}дляTEXTатрибутов, определяет важность этого атрибута при расчете точности результата. Это множитель, по умолчанию равный 1, если не указано другое. -
SEPARATOR {sep}дляTAGатрибутов, указывает, как текст, содержащийся в атрибуте, должен быть разделен на отдельные теги. По умолчанию,. Значение должно быть одиночным символом. -
CASESENSITIVEдляTAGатрибутов, сохраняет исходный регистр букв тегов. Если не указано иное, символы преобразуются в нижний регистр. -
WITHSUFFIXTRIEдляTEXTиTAGатрибутов, сохраняет префиксный Trie со всеми терминами, которые соответствуют префиксу. Это используется для оптимизацииcontains(foo) иsuffix(*foo) запросов. В противном случае выполняется поиск методом грубой силы по Trie. Если префиксный Trie существует для некоторых полей, эти запросы будут отключены для других полей.
Необязательные аргументы
ON {data_type}в настоящее время поддерживает HASH (по умолчанию) и JSON. Для индексации JSON необходимо установить модуль RedisJSON.
PREFIX {count} {prefix}указывается, какие ключи необходимо индексировать. Вы можете добавить несколько префиксов для индексации. Поскольку аргумент необязателен, по умолчанию * (все ключи).
FILTER {filter}это выражение фильтра с полным языком выражений агрегации RediSearch. Возможна подстановка @__key для доступа к ключу, который был только что добавлен/изменён. Поле может быть использовано для задания имени поля путём передачи 'FILTER @indexName=="myindexname"'.
LANGUAGE {default_lang}если установлено, указывает язык по умолчанию для документов в индексе. По умолчанию английский.
LANGUAGE_FIELD {lang_attribute}это атрибут документа, устанавливаемый в качестве языка документа.
Для индексирования используется стеминг для предоставленного языка. Если язык не поддерживается, команда возвращает ошибку. Поддерживаемые языки: арабский, баскский, каталонский, датский, голландский, английский, финский, французский, немецкий, греческий, венгерский, индонезийский, ирландский, итальянский, литовский, непальский, норвежский, португальский, румынский, русский, испанский, шведский, тамильский, турецкий и китайский.
При добавлении китайских документов установите LANGUAGE chinese для правильного токенизации терминов индексором. Если вы используете язык по умолчанию, термины поиска извлекаются на основе знаков препинания и пробелов. Токенизатор китайского языка использует алгоритм сегментации (через Friso), который сегментирует текст и проверяет его против предопределённого словаря. Подробнее см. Стеминг.
SCORE {default_score}это значение по умолчанию для очков документов в индексе. Значение по умолчанию — 1.0.
SCORE_FIELD {score_attribute}это атрибут документа, который вы используете в качестве рейтинга документа на основе рейтинга пользователя. Рейтинг должен быть между 0,0 и 1,0. Если не указано, используется значение по умолчанию 1.
PAYLOAD_FIELD {payload_attribute}это атрибут документа, который вы используете как двоичную безопасную строку-загрузку в документ, которая может быть оценена во время запроса с помощью пользовательской функции оценки или возвращена клиенту.
MAXTEXTFIELDSпринудительно кодирует индексы, как будто в них больше 32 текстовых атрибутов, что позволяет добавить дополнительные атрибуты (более 32) с помощью FT.ALTER. Для повышения эффективности RediSearch кодирует индексы по-разному, если они созданы с менее чем 32 текстовыми атрибутами.
NOOFFSETSне сохраняет смещения терминов для документов. Это экономит память, но не позволяет выполнять точные поиски или выделение.
TEMPORARY {seconds}создает лёгкий временный индекс, который истекает после указанного периода бездействия в секундах. Внутренний таймер бездействия сбрасывается всякий раз, когда к индексу выполняется поиск или добавление. Поскольку такие индексы лёгкие, вы можете создавать тысячи таких индексов без негативного влияния на производительность и, следовательно, должны рассмотреть возможность использования SKIPINITIALSCAN для избежания дорогостоящего сканирования.
При истечении срока действия временных индексов они удаляют все связанные с ними записи. FT.DROPINDEX был введен с параметром по умолчанию, не удаляющим документы, и флагом DD для принудительного удаления. Однако для временных индексов документы удаляются вместе с индексом. Раньше RediSearch использовал команду FT.ADD, которая устанавливала связь между документом и индексом. Затем команда FT.DROP (также историческая команда) по умолчанию удаляла документы. В версии 2.x RediSearch индексирует хеши и JSON, и зависимость между индексом и документами больше не существует.
NOHLэкономит место на диске и память, отключая поддержку выделения. Если установлено, соответствующие байтовые смещения для позиций терминов не сохраняются. NOHL также подразумевается NOOFFSETS.
NOFIELDSне сохраняет биты атрибутов для каждого термина. Это экономит память, но не позволяет выполнять фильтрацию по определённым атрибутам.
NOFREQSизбегает сохранения частот терминов в индексе. Это экономит память, но не позволяет сортировать по частоте заданного термина в документе.
STOPWORDS {count}устанавливает индекс с пользовательским списком стоп-слов, которые игнорируются во время индексирования и поиска. {count} — количество стоп-слов, за которым следует список стоп-слов длиной ровно {count}.
Если не указано, FT.CREATE использует список стоп-слов по умолчанию. Если {count} установлено в 0, индекс не имеет стоп-слов.
SKIPINITIALSCANесли установлено, сканирование и индексирование не выполняется.
-
Пределы количества атрибутов: RediSearch поддерживает до 1024 атрибутов на схему, из которых не более 128 могут быть атрибутами типа TEXT. В 32-битных сборках не более 64 атрибутов могут быть атрибутами типа TEXT. Чем больше атрибутов у вас, тем больше индекс, поскольку каждый дополнительные 8 атрибутов требуют одного дополнительного байта на запись индекса для кодирования. Вы всегда можете использовать опцию
NOFIELDS, чтобы не кодировать информацию об атрибутах в индекс, для экономии места, если вам не нужно фильтрация по текстовым атрибутам. Это все равно позволит фильтровать по числовым и гео-атрибутам. -
Запуск в кластеризованных базах данных: При наличии нескольких индексов в кластеризованной базе данных, вам необходимо убедиться, что документы, которые вы хотите индексировать, находятся на том же фрагменте, что и индекс. Этого можно добиться, добавив к вашим документам тег с именем индекса.
127.0.0.1:6379> HSET doc:1{idx} ... 127.0.0.1:6379> FT.CREATE idx ... PREFIX 1 doc: ...
При запуске RediSearch в кластеризованной базе данных, вы можете распространить индекс по фрагментам с помощью RSCoordinator. В этом случае вышесказанное не применяется.
Возврат
FT.CREATE возвращает простую строковую ответ OK при успешном выполнении или ответ об ошибке в противном случае.
Примеры
Создать индекс
Создать индекс, который хранит заголовок, дату публикации и категории хешей записей блога, ключи которых начинаются с blog:post: (например, blog:post:1).
127.0.0.1:6379> FT.CREATE idx ON HASH PREFIX 1 blog:post: SCHEMA title TEXT SORTABLE published_at NUMERIC SORTABLE category TAG SORTABLE
OKИндексировать атрибут sku из хеша как TAG и как TEXT:
127.0.0.1:6379> FT.CREATE idx ON HASH PREFIX 1 blog:post: SCHEMA sku AS sku_text TEXT sku AS sku_tag TAG SORTABLEИндексировать два разных хеша, один содержащий данные об авторах, а другой - данные о книгах, в одном индексе:
127.0.0.1:6379> FT.CREATE author-books-idx ON HASH PREFIX 2 author:details: book:details: SCHEMA
author_id TAG SORTABLE author_ids TAG title TEXT name TEXTВ этом примере ключи для данных об авторах используют шаблон ключей author:details:<id>, а ключи для данных о книгах используют шаблон book:details:<id>.
Индексирование JSON-документа с использованием выражения JSON Path
Индексировать авторов, имена которых начинаются с G.
127.0.0.1:6379> FT.CREATE g-authors-idx ON HASH PREFIX 1 author:details FILTER 'startswith(@name, "G")' SCHEMA name TEXTИндексировать только книги, у которых есть подзаголовок.
127.0.0.1:6379> FT.CREATE subtitled-books-idx ON HASH PREFIX 1 book:details FILTER '@subtitle != ""' SCHEMA title TEXTИндексировать книги, у которых есть атрибут "categories", где каждая категория разделена символом ;.
127.0.0.1:6379> FT.CREATE books-idx ON HASH PREFIX 1 book:details FILTER SCHEMA title TEXT categories TAG SEPARATOR ";"Индексировать JSON-документ с использованием выражения JSON Path.
127.0.0.1:6379> FT.CREATE idx ON JSON SCHEMA $.title AS title TEXT $.categories AS categories TAGСм. также
Связанные темы
История
- Начиная с версии Redis 2.0.0: Добавлено
PAYLOAD_FIELDаргумент для обратной совместимости с устаревшим аргументомFT.SEARCHWITHPAYLOADS - Начиная с версии Redis 2.0.0: Устарел аргумент
PAYLOAD_FIELD
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/ft.create/