Skip to main content
Use SEARCH.CREATE to create a search index over JSON, hash, or string values, or over a stream. 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. ON STREAM indexes a single stream instead of a set of keys, so it takes the stream key in place of PREFIX. Each entry added with XADD becomes a document whose fields are the entry’s fields and whose ID is the entry ID, which is what makes a stream searchable by content rather than only by ID range. Entries removed from the stream leave the index as well. TEXT, KEYWORD, U64, I64, F64, and DATE fields can index multiple values. Store the field as a JSON array; for hash and stream indexes, store the complete JSON-encoded array in the field string. Each valid element is indexed separately, and a document matches when any element matches. BOOL and FACET fields remain single-valued. 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. 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

Schema field options

TEXT, KEYWORD, U64, I64, F64, and DATE fields accept multiple values. A field whose value is a JSON array is indexed element by element, and a document matches when any valid element matches. See Multi-value fields for data-type-specific input formats and query behavior.

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.

Examples