Skip to main content
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

Important points

  • TOPK and 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. VALUES is the readable form; FP32 avoids decimal formatting on a binary-safe connection; BASE64-FP32 carries the same bytes through JSON, which is what the REST API needs.
  • Results are ordered by score, highest first. Scores are normalized to 0 through 1 for every metric.
  • A query vector whose length differs from the index’s DIM returns ERR 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.
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.
This command is not supported yet in @upstash/redis.
This command is not supported yet in upstash_redis.