FT.CREATE
Creates an index with the given spec
Browse all commands · Upstream source documentation
| Reference field | Value |
|---|---|
| Canonical name | FT.CREATE |
| Catalog group | Search commands |
| Upstream since | 1.0.0 — upstream Redis/module version, not an ffkv release |
| Pinned catalog | Redis 8.10.0 |
Syntax
Section titled “Syntax”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 [stopword ...]]] [SKIPINITIALSCAN] [INDEXALL <ENABLE | DISABLE>] SCHEMA field name [AS alias] <TEXT | TAG | NUMERIC | GEO | VECTOR> [WITHSUFFIXTRIE] [INDEXEMPTY] [INDEXMISSING] [SORTABLE [UNF]] [NOINDEX] [field name [AS alias] <TEXT | TAG | NUMERIC | GEO | VECTOR> [WITHSUFFIXTRIE] [INDEXEMPTY] [INDEXMISSING] [SORTABLE [UNF]] [NOINDEX] ...]ffkv behavior and limits
Section titled “ffkv behavior and limits”Search worker configuration controls a real Rayon pool; GC schedules generation-fenced Rust compaction, not a POSIX fork. Search indexes and documents are bounded and RAM-resident; upstream syntax is not a promise of every option combination or Redis module ABI parity.
Source: README.md:375–377, 636–642; src/engine/search/; tests/bdd/features/search.feature.
All requests share the 8 MiB framing/1,024-argument ingress limit; normal RESP replies have 64 MiB wire/logical budgets with bounded nesting/value counts. Management and Lua origins impose smaller budgets. These are not a process RSS cap. Catalog inclusion is not exhaustive option or wire-format parity. See limits and compatibility.
Metadata availability
Section titled “Metadata availability”This command is in the canonical catalog but has no matching entry in the pinned src/command_metadata.json. Argument flags, complexity and key specifications are not invented. Use the syntax, upstream source documentation and actual scenario evidence below.
BDD coverage and source examples
Section titled “BDD coverage and source examples”These are source observations, not a test run performed by this documentation build. A tag identifies scenario intent; an extracted vector identifies a command invocation, which may intentionally produce an error. Scenarios may require setup, multiple connections, persistence, cluster nodes or native-module fixtures.
- Dynamic index namespace denials are logged without logging visibility filtering —
tests/bdd/features/client_control_repair.feature:474; invocation observed. - Dynamic document deletion denials identify only the rejected document —
tests/bdd/features/client_control_repair.feature:533; invocation observed. - Function and search metadata accompany migrated keys without replacing unrelated catalogs —
tests/bdd/features/cluster.feature:1011; invocation observed. - Numeric signed zero bounds share equality without invalid ranges —
tests/bdd/features/search.feature:5; command tag and invocation observed. - Empty tag queries follow initial scans updates deletion and rebuild —
tests/bdd/features/search.feature:61; command tag and invocation observed. - Initial scans and typed intersections find only eligible documents —
tests/bdd/features/search.feature:113; command tag and invocation observed. - Hash mutations remove old postings without losing the source value —
tests/bdd/features/search.feature:137; invocation observed. - Invalid indexed values reject the document but never roll back HSET —
tests/bdd/features/search.feature:161; invocation observed. - Alias creation rebinding and deletion affect metadata only —
tests/bdd/features/search.feature:206; invocation observed. - ALTER validates a full new schema before rescanning existing documents —
tests/bdd/features/search.feature:255; invocation observed. - Dictionaries supplement real document-frequency spelling suggestions —
tests/bdd/features/search.feature:321; invocation observed. - Synonym updates preserve skipped document coverage through recovery —
tests/bdd/features/search.feature:361; invocation observed. - Tags preserve interior spaces and normalize only configured case —
tests/bdd/features/search.feature:406; invocation observed. - Index aliases and dictionaries never become Redis keys or real indexes —
tests/bdd/features/search.feature:438; invocation observed. - DROPINDEX keeps documents unless DD explicitly deletes indexed sources —
tests/bdd/features/search.feature:462; invocation observed. - Explain APIs expose the parsed indexed execution tree —
tests/bdd/features/search.feature:490; invocation observed. - Ordered transformations feed genuine grouped reducers —
tests/bdd/features/search.feature:511; invocation observed. - Global reducers consume all input rows exactly once —
tests/bdd/features/search.feature:532; invocation observed. - Repeated grouping preserves stage order and sorted distinct records —
tests/bdd/features/search.feature:565; invocation observed. - A cursor advances real pipeline state without duplicate or skipped rows —
tests/bdd/features/search.feature:598; invocation observed. - Deleted cursor handles cannot be reused —
tests/bdd/features/search.feature:637; invocation observed. - Profiling returns the actual query result and measured execution metadata —
tests/bdd/features/search.feature:663; invocation observed. - Each vector algorithm maintains a real index across updates and deletions (Scenario Outline) —
tests/bdd/features/search.feature:693; invocation observed. - Reciprocal-rank fusion combines the union of text and vector branches —
tests/bdd/features/search.feature:726; invocation observed. - Geographic radius and nonrectangular shape predicates use indexed geometry —
tests/bdd/features/search.feature:755; invocation observed. - JSON multivalue indexing follows all matching paths and subsequent JSON writes —
tests/bdd/features/search.feature:779; command tag and invocation observed. - Phrase fuzzy stemming and highlighting share genuine match positions —
tests/bdd/features/search.feature:816; invocation observed. - Minimum stem length governs indexed words without blocking short query roots —
tests/bdd/features/search.feature:856; invocation observed. - Missing and empty fields remain distinct searchable states —
tests/bdd/features/search.feature:880; invocation observed. - Rename expiration deletion and type replacement do not leave stale postings —
tests/bdd/features/search.feature:904; invocation observed. - Recovery retains intentionally unindexed initial data and metadata namespaces —
tests/bdd/features/search.feature:944; command tag and invocation observed. - ACLs authorize prefix namespaces rather than the index name —
tests/bdd/features/search.feature:985; invocation observed. - Search metadata cannot be created outside database zero —
tests/bdd/features/search.feature:1014; command tag and invocation observed. - Invalid query schema and pipeline options fail without document mutation (Scenario Outline) —
tests/bdd/features/search.feature:1027; command tag and invocation observed. - COLLECT preserves nested stage-local records across chained grouping —
tests/bdd/features/search.feature:1058; invocation observed. - Expressions compose string arithmetic conditional and UTC date functions —
tests/bdd/features/search.feature:1075; invocation observed. - Search payloads and aggregate LOAD remain binary safe —
tests/bdd/features/search.feature:1092; invocation observed. - Invalid vector blobs do not undo successful document writes —
tests/bdd/features/search.feature:1132; invocation observed. - Suffix dictionaries update when their last posting disappears —
tests/bdd/features/search.feature:1168; invocation observed. - Read-only document grants never authorize DROPINDEX DD deletion —
tests/bdd/features/search.feature:1196; invocation observed. - Matching a literal prefix probe does not authorize a whole index namespace —
tests/bdd/features/search.feature:1225; invocation observed. - Search worker reconfiguration preserves queries and enforces strict timeout prerequisites —
tests/bdd/features/search.feature:1246; invocation observed. - Disposable Lua debugging sees staged search changes without publishing catalog changes —
tests/bdd/features/search.feature:1316; invocation observed. - Swapping database zero reconciles search documents without replacing schemas or aliases —
tests/bdd/features/search.feature:1381; invocation observed.
Extracted command vectors
Section titled “Extracted command vectors”The following JSON arrays are the test harness’s argument vectors, not shell commands. Numeric arguments are converted by the harness; objects of the form {"base64":"…"} represent decoded binary bytes, not a literal JSON command argument. Preserve scenario setup and connection ordering. See the CLI guide for shell quoting and binary stdin. No reply is invented or inferred.
Index aliases and dictionaries never become Redis keys or real indexes — tests/bdd/features/search.feature:440 (the following commands succeed:)
[ "FT.CREATE", "idx", "SCHEMA", "title", "TEXT"]ACLs authorize prefix namespaces rather than the index name — tests/bdd/features/search.feature:987 (the following commands succeed:)
[ "FT.CREATE", "global", "SCHEMA", "title", "TEXT"]Explain APIs expose the parsed indexed execution tree — tests/bdd/features/search.feature:492 (the following commands succeed:)
[ "FT.CREATE", "idx", "SCHEMA", "title", "TEXT", "price", "NUMERIC"]