Use VECTOR.QUERY to find the IDs whose vectors are closest to a query vector.
TOPK sets how many results to return, and the query vector is given in the same three forms VECTOR.ADD accepts. The reply is a list of ID and score pairs, best match first. Scores are normalized to the range 0 to 1 for every metric, so a higher score always means a closer match and a threshold can be applied without knowing which metric the index uses.
PROFILE trades recall against latency. FAST examines less of the index and returns sooner, PRECISE examines more and is likelier to return the true nearest neighbours, and BALANCED, the default, sits between them. The profile only changes how the query reads the index, never what is stored, so it can be varied per call.
Search is approximate: a query may miss a true neighbour, and raising TOPK or moving to PRECISE reduces how often that happens. Asking for more results than the index holds simply returns everything it has.
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. |
TOPK <count> | Yes | No | Maximum number of results to return. Must be between 1 and 1000. |
VALUES <count> <element> [<element> ...] | No | No | Vector given as <count> decimal elements. |
FP32 <blob> | No | No | Vector given as a raw binary blob of little-endian 32-bit floats. Its length must be a non-zero multiple of 4. |
BASE64-FP32 <blob> | No | No | Vector given as the standard base64 encoding of an FP32 blob. |
PROFILE <profile> | No | No | Recall and latency trade-off: FAST, BALANCED, or PRECISE. Defaults to BALANCED. |
Important points#
TOPKand the query vector are both required; the clauses may be given in any order.- The three vector forms are mutually exclusive and exactly one must be given.
VALUESis the readable form;FP32avoids decimal formatting on a binary-safe connection;BASE64-FP32carries the same bytes through JSON, which is what the REST API needs. - Results are ordered by score, highest first. Scores are normalized to
0through1for every metric. - A query vector whose length differs from the index's
DIMreturnsERR vector dimension mismatch: expected <dim>, got <n>.
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 | Array of two-element arrays, each an ID and its score as a bulk string containing a number |
| RESP3 | Array of two-element arrays, each an ID and its score as a double |
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.