Use VECTOR.CREATE to create a vector index at a key.
DIM fixes the number of elements every vector in the index must have, and METRIC fixes how similarity between two vectors is measured. Both are permanent: they decide how the index is built, so they cannot be changed afterwards, and a vector whose length does not match DIM is rejected at write time. Pick COSINE when only the direction of the embedding matters, which is the usual choice for text embeddings, DOT when magnitude carries meaning, and EUCLIDEAN when straight-line distance in the embedding space does.
The index occupies its key like any other Redis value, so EXISTS, EXPIRE, and DEL work on it, and creating one at a key already used by another type fails. EXISTSOK makes the command succeed instead of failing when the index is already there, which keeps a start-up path idempotent; a mismatch in dimension or metric is still an error.
Vector indexes are an Upstash extension. See the vector command overview for how an index is created, written to, and queried.
Syntax#
Arguments#
| Argument | Required | Repeatable | Description |
|---|---|---|---|
<index> | Yes | No | Key holding the vector index. |
DIM <dimension> | Yes | No | Number of elements in every vector. Must be between 1 and 32768. |
METRIC <metric> | Yes | No | Similarity metric: COSINE, EUCLIDEAN, or DOT. |
EXISTSOK | No | No | Return 0 instead of an error when an index with the same dimension and metric already exists. |
Important points#
DIMandMETRICare both required and cannot be changed after the index is created. UseVECTOR.DROPand create it again to change either.- Without
EXISTSOK, creating an index that already exists returnsERR Index <index> already exists. - With
EXISTSOK, an existing index with a different dimension or metric returnsERR Index <index> already exists with a different configuration.
Response#
The reply reports the result of the operation. Error replies have the same shape in RESP2 and RESP3 and are surfaced as exceptions by the SDKs below.
| Protocol | Reply |
|---|---|
| RESP2 | Integer: 1 if the index was created, 0 if EXISTSOK matched an existing index |
| RESP3 | Integer: 1 if the index was created, 0 if EXISTSOK matched an existing index |
Client libraries often decode bulk strings, maps, sets, and numeric strings into language-native values. The table describes the Redis wire reply.
Examples#
TCP examples use the TLS REDIS_URL from the Upstash console. REST examples use UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN.
Redis CLI
@upstash/redis
This command is not supported yet in @upstash/redis.
upstash_redis
This command is not supported yet in upstash_redis.