Use SEARCH.CREATE to create a search index over JSON, hash, or string values.
ON names the type of key to index and PREFIX the key prefixes to watch, so the index covers exactly the keys that match both, including keys written after it was created. The SCHEMA then declares which fields are searchable and how: TEXT fields are analyzed for full-text search, with NOSTEM and NOTOKENIZE to turn parts of that off, numeric, boolean, and date fields are matched exactly and can be marked FAST to make them usable for sorting and scoring, and KEYWORD and FACET fields are kept whole for exact matching and faceting. FROM maps a schema field to a differently named field in the document.
Creating an index starts an initial scan of the matching keys, which SKIPINITIALSCAN skips when you only want to index data written from now on; SEARCH.REINDEX can run that scan later. EXISTSOK makes the command succeed instead of failing when the index already exists.
See Index Management for a feature-level guide to creating indexes and Schema Definition for field types and schema design.
Upstash Redis Search uses SEARCH.* commands. They are separate from and incompatible with the FT.* commands in the open-source RediSearch module.
Syntax#
Arguments#
| Argument | Description |
|---|---|
ON | Type of Redis value to index: JSON, HASH, or STRING. A STRING value must contain a JSON object. |
PREFIX | One or more key prefixes. Prefixes in the same index cannot be duplicates or overlap one another. |
LANGUAGE | Stemming language for TEXT fields. Defaults to english. Supported values are arabic, danish, dutch, english, finnish, french, german, greek, hungarian, italian, norwegian, portuguese, romanian, russian, spanish, swedish, tamil, and turkish. |
SKIPINITIALSCAN | Create the index without scanning existing keys. Later writes are still indexed; use SEARCH.REINDEX to add the current matching data. |
EXISTSOK | Return 0 when an index with the same data type, prefixes, and schema already exists. A configuration mismatch returns an error. |
SCHEMA | One or more field definitions. SCHEMA must be the final top-level clause. |
Schema field options#
| Option | Valid field types | Description |
|---|---|---|
FAST | U64, I64, F64, BOOL, DATE | Store the field for operations such as sorting and aggregations. Score functions accept FAST fields of type U64, I64, or F64. |
NOSTEM | TEXT | Index text without stemming words to their roots. |
NOTOKENIZE | TEXT | Index the entire value as one token. |
FROM <source_field> | All field types | Read the value from a different document field or nested dot path while exposing it under <field> in the index. |
Response#
Returns 1 when the index is created. With EXISTSOK, returns 0 if the existing index has the same data type, prefixes, and schema. Returns an error for a different configuration or when <name> is already used by a non-index Redis key.