{"id":"vector-sets","title":"Redis vector sets","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/","summary":"Introduction to Redis vector sets","tags":["docs","develop","stack","oss","rs","rc","oss","kubernetes","clients"],"last_updated":"2026-04-30T19:37:57+02:00","children":[{"id":"filtered-search","summary":"Use filter expressions to refine vector similarity results with Redis vector sets","title":"Filter expressions","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/filtered-search\/"},{"id":"performance","summary":"Learn how Redis vector sets behave under load and how to optimize for speed and recall","title":"Performance","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/performance\/"},{"id":"scalability","summary":"Scale Redis vector sets to handle larger data sets and workloads","title":"Scalability","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/scalability\/"},{"id":"memory","summary":"Learn how to optimize memory consumption in Redis vector sets","title":"Memory optimization","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/memory\/"},{"id":"troubleshooting","summary":"Diagnose and debug issues when working with Redis vector sets","title":"Troubleshooting","url":"https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/troubleshooting\/"}],"page_type":"content","content_hash":"8fb53ad4b27e08341ec1a7bec3716c2a333af8685a6f00c669b5a684fdb268c0","sections":[{"id":"vector-set-command-summary","title":"Vector set command summary","role":"content","text":"**13 commands in this group:**\n\n[View all module commands](https:\/\/redis.io\/commands\/?group=vector_set)\n\n| Command | Summary | Complexity | Since |\n|---------|---------|------------|-------|\n| [VADD](https:\/\/redis.io\/commands\/vadd\/) | Add one or more elements to a vector set, or update its vector if it already exists | N\/A | 8.0.0 |\n| [VCARD](https:\/\/redis.io\/commands\/vcard\/) | Return the number of elements in a vector set | N\/A | 8.0.0 |\n| [VDIM](https:\/\/redis.io\/commands\/vdim\/) | Return the dimension of vectors in the vector set | N\/A | 8.0.0 |\n| [VEMB](https:\/\/redis.io\/commands\/vemb\/) | Return the vector associated with an element | N\/A | 8.0.0 |\n| [VGETATTR](https:\/\/redis.io\/commands\/vgetattr\/) | Retrieve the JSON attributes of elements | N\/A | 8.0.0 |\n| [VINFO](https:\/\/redis.io\/commands\/vinfo\/) | Return information about a vector set | N\/A | 8.0.0 |\n| [VISMEMBER](https:\/\/redis.io\/commands\/vismember\/) | Check if an element exists in a vector set | N\/A | 8.2.0 |\n| [VLINKS](https:\/\/redis.io\/commands\/vlinks\/) | Return the neighbors of an element at each layer in the HNSW graph | N\/A | 8.0.0 |\n| [VRANDMEMBER](https:\/\/redis.io\/commands\/vrandmember\/) | Return one or multiple random members from a vector set | N\/A | 8.0.0 |\n| [VRANGE](https:\/\/redis.io\/commands\/vrange\/) | Return vector set elements in a lex range | N\/A | 8.4.0 |\n\n#### Vector set command summary (part 2)\n\n| Command | Summary | Complexity | Since |\n|---------|---------|------------|-------|\n| [VREM](https:\/\/redis.io\/commands\/vrem\/) | Remove an element from a vector set | N\/A | 8.0.0 |\n| [VSETATTR](https:\/\/redis.io\/commands\/vsetattr\/) | Associate or remove the JSON attributes of elements | N\/A | 8.0.0 |\n| [VSIM](https:\/\/redis.io\/commands\/vsim\/) | Return elements by vector similarity | N\/A | 8.0.0 |\n\n\n\nVector sets are a data type similar to sorted sets, but instead of a score, vector set elements have a string representation of a vector.\nVector sets allow you to add items to a set, and then either:\n\n* retrieve a subset of items that are the most similar to a specified vector, or\n* retrieve a subset of items that are the most similar to the vector of an element that is already part of the vector set.\n\nVector sets also provide for optional [filtered search](https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/filtered-search). You can associate attributes with all or some elements in a vector set, and then use the `FILTER` option of the [`VSIM`](https:\/\/redis.io\/docs\/latest\/commands\/vsim) command to retrieve items similar to a given vector while applying simple mathematical filters to those attributes. Here's a sample filter: `\".year > 1950\"`."},{"id":"endianness-considerations-for-fp32-format","title":"Endianness considerations for FP32 format","role":"content","text":"When using the FP32 blob format with vector set commands like [`VADD`](https:\/\/redis.io\/docs\/latest\/commands\/vadd) and [`VSIM`](https:\/\/redis.io\/docs\/latest\/commands\/vsim), the binary data must be encoded in little-endian byte order. This is important for cross-platform compatibility, as some ARM variants and other architectures may use different endianness.\n\nIf your platform uses big-endian or mixed-endian encoding, you have two options:\n- Manually convert the byte order to little-endian before passing the blob to Redis.\n- Use the `VALUES` syntax instead, which accepts floating-point numbers as strings and is platform-independent."},{"id":"examples","title":"Examples","role":"example","text":"The following examples give an overview of how to use vector sets. For clarity,\nwe will use a set of two-dimensional vectors that represent points in the\nCartesian coordinate plane. However, in real use cases, the vectors will typically\nrepresent *text embeddings* and have hundreds of dimensions. See\n[Redis for AI](https:\/\/redis.io\/docs\/latest\/develop\/ai) for more information about using text\nembeddings.\n\nThe points we will use are A: (1.0, 1.0), B: (-1.0, -1.0), C: (-1.0, 1.0), D: (1.0. -1.0), and\nE: (1.0, 0), shown in the diagram below.\n\n![images\/vecsets\/VecSetExamplePoints.drawio.svg](https:\/\/redis.io\/docs\/latest\/images\/vecsets\/VecSetExamplePoints.drawio.svg)"},{"id":"basic-operations","title":"Basic operations","role":"content","text":"Start by adding the point vectors to a set called `points` using\n[`VADD`](https:\/\/redis.io\/docs\/latest\/commands\/vadd). This also creates the vector set object.\nThe [`TYPE`](https:\/\/redis.io\/docs\/latest\/commands\/type) command returns a type of `vectorset`\nfor this object.\n\nFoundational: Use VADD to create a new vector set and populate it with vectors\n\n**Commands:** VADD, TYPE\n\n**Complexity:**\n- TYPE: O(1)\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\n\nGet the number of elements in the set (also known as the *cardinality* of the set)\nusing [`VCARD`](https:\/\/redis.io\/docs\/latest\/commands\/vcard) and the number of dimensions of\nthe vectors using [`VDIM`](https:\/\/redis.io\/docs\/latest\/commands\/vdim):\n\nMetadata retrieval: Use VCARD to get the number of elements and VDIM to get vector dimensions when you need to inspect vector set properties\n\n**Builds upon:** vadd\n\n**Commands:** VCARD, VDIM\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\nGet the coordinate values from the elements using [`VEMB`](https:\/\/redis.io\/docs\/latest\/commands\/vemb).\nNote that the values will not typically be the exact values you supplied when you added\nthe vector because\n[quantization](https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/performance#quantization-effects)\nis applied to improve performance.\n\nVector retrieval: Use VEMB to retrieve the approximate vector values of elements when you need to inspect the actual vector data stored in the set\n\n**Builds upon:** vadd\n\n**Commands:** VEMB\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\nRemove an unwanted element with [`VREM`](https:\/\/redis.io\/docs\/latest\/commands\/vrem)\n\nElement removal: Use VREM to delete elements from a vector set when you need to remove vectors from the collection\n\n**Builds upon:** vadd\n\n**Commands:** VADD, VCARD, VREM\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\nSet and retrieve an element's JSON attribute data using\n[`VSETATTR`](https:\/\/redis.io\/docs\/latest\/commands\/vsetattr)\nand [`VGETATTR`](https:\/\/redis.io\/docs\/latest\/commands\/vgetattr). You can also pass an empty string\nto `VSETATTR` to delete the attribute data:\n\nAttribute management: Use VSETATTR to store JSON attributes on elements and VGETATTR to retrieve them when you need to associate metadata with vectors\n\n**Builds upon:** vadd\n\n**Commands:** VSETATTR, VGETATTR\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]"},{"id":"vector-similarity-search","title":"Vector similarity search","role":"content","text":"Use [`VSIM`](https:\/\/redis.io\/docs\/latest\/commands\/vsim) to rank the points in order of their vector distance from a sample point:\n\nSimilarity search: Use VSIM to find elements most similar to a query vector when you need to perform vector similarity searches\n\n**Difficulty:** Intermediate\n\n**Builds upon:** vadd\n\n**Commands:** VSIM\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\nFind the four elements that are closest to point A and show their distance \"scores\":\n\nSimilarity with options: Use VSIM with ELE, WITHSCORES, and COUNT options to find similar elements with scores and limits when you need detailed similarity results\n\n**Difficulty:** Intermediate\n\n**Builds upon:** vadd\n\n**Commands:** VSIM\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]\n\n\n\nAdd some JSON attributes and use\n[filter expressions](https:\/\/redis.io\/docs\/latest\/develop\/data-types\/vector-sets\/filtered-search)\nto include them in the search:\n\nFiltered similarity search: Use VSIM with FILTER option to apply attribute-based conditions to similarity results when you need to combine vector similarity with attribute filtering\n\n**Difficulty:** Advanced\n\n**Builds upon:** vadd\n\n**Commands:** VSETATTR, VSIM\n\n**Available in:** Redis CLI, C#, Go, Java (Asynchronous - Lettuce), Java (Reactive - Lettuce), Java (Synchronous - Jedis), JavaScript (Node.js), PHP, Python, Rust (Asynchronous), Rust (Synchronous)\n\n##### Redis CLI\n\n[code example]\n\n##### C#\n\n[code example]\n\n##### Go\n\n[code example]\n\n##### Java (Asynchronous - Lettuce)\n\n[code example]\n\n##### Java (Reactive - Lettuce)\n\n[code example]\n\n##### Java (Synchronous - Jedis)\n\n[code example]\n\n##### JavaScript (Node.js)\n\n[code example]\n\n##### PHP\n\n[code example]\n\n##### Python\n\n[code example]\n\n##### Rust (Asynchronous)\n\n[code example]\n\n##### Rust (Synchronous)\n\n[code example]"},{"id":"more-information","title":"More information","role":"content","text":"See the other pages in this section to learn more about the features\nand performance parameters of vector sets."}],"examples":[{"id":"basic-operations-ex0","language":"plaintext","code":"> VADD points VALUES 2 1.0 1.0 pt:A\n(integer) 1\n> VADD points VALUES 2 -1.0 -1.0 pt:B\n(integer) 1\n> VADD points VALUES 2 -1.0 1.0 pt:C\n(integer) 1\n> VADD points VALUES 2 1.0 -1.0 pt:D\n(integer) 1\n> VADD points VALUES 2 1.0 0 pt:E\n(integer) 1\n> TYPE points\nvectorset","section_id":"basic-operations"},{"id":"basic-operations-ex1","language":"csharp","code":"bool r1 = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:A\", new float[] { 1f, 1f }, null));\n        Console.WriteLine(r1); \/\/ >>> True\n\n        bool r2 = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:B\", new float[] { -1f, -1f }, null));\n        Console.WriteLine(r2); \/\/ >>> True\n\n        bool r3 = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:C\", new float[] { -1f, 1f }, null));\n        Console.WriteLine(r3); \/\/ >>> True\n\n        bool r4 = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:D\", new float[] { 1f, -1f }, null));\n        Console.WriteLine(r4); \/\/ >>> True\n\n        bool r5 = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:E\", new float[] { 1f, 0f }, null));\n        Console.WriteLine(r5); \/\/ >>> True","section_id":"basic-operations"},{"id":"basic-operations-ex2","language":"go","code":"res1, err := rdb.VAdd(ctx, \"points\", \"pt:A\",\n\t\t&redis.VectorValues{Val: []float64{1.0, 1.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res1) \/\/ >>> true\n\n\tres2, err := rdb.VAdd(ctx, \"points\", \"pt:B\",\n\t\t&redis.VectorValues{Val: []float64{-1.0, -1.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res2) \/\/ >>> true\n\n\tres3, err := rdb.VAdd(ctx, \"points\", \"pt:C\",\n\t\t&redis.VectorValues{Val: []float64{-1.0, 1.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res3) \/\/ >>> true\n\n\tres4, err := rdb.VAdd(ctx, \"points\", \"pt:D\",\n\t\t&redis.VectorValues{Val: []float64{1.0, -1.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res4) \/\/ >>> true\n\n\tres5, err := rdb.VAdd(ctx, \"points\", \"pt:E\",\n\t\t&redis.VectorValues{Val: []float64{1.0, 0.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res5) \/\/ >>> true\n\n\tres6, err := rdb.Type(ctx, \"points\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res6) \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex3","language":"java","code":"CompletableFuture<Boolean> addPointA = asyncCommands.vadd(\"points\", \"pt:A\", 1.0, 1.0).thenApply(result -> {\n                System.out.println(result); \/\/ >>> true\n                return result;\n            }).toCompletableFuture();\n\n            CompletableFuture<Boolean> addPointB = asyncCommands.vadd(\"points\", \"pt:B\", -1.0, -1.0).thenApply(result -> {\n                System.out.println(result); \/\/ >>> true\n                return result;\n            }).toCompletableFuture();\n\n            CompletableFuture<Boolean> addPointC = asyncCommands.vadd(\"points\", \"pt:C\", -1.0, 1.0).thenApply(result -> {\n                System.out.println(result); \/\/ >>> true\n                return result;\n            }).toCompletableFuture();\n\n            CompletableFuture<Boolean> addPointD = asyncCommands.vadd(\"points\", \"pt:D\", 1.0, -1.0).thenApply(result -> {\n                System.out.println(result); \/\/ >>> true\n                return result;\n            }).toCompletableFuture();\n\n            CompletableFuture<Boolean> addPointE = asyncCommands.vadd(\"points\", \"pt:E\", 1.0, 0.0).thenApply(result -> {\n                System.out.println(result); \/\/ >>> true\n                return result;\n            }).toCompletableFuture();\n\n            \/\/ Chain checkDataType after all vadd operations complete\n            CompletableFuture<Void> vaddOperations = CompletableFuture\n                    .allOf(addPointA, addPointB, addPointC, addPointD, addPointE)\n                    .thenCompose(ignored -> asyncCommands.type(\"points\")).thenAccept(result -> {\n                        System.out.println(result); \/\/ >>> vectorset\n                    }).toCompletableFuture();","section_id":"basic-operations"},{"id":"basic-operations-ex4","language":"java","code":"Mono<Boolean> addPointA = reactiveCommands.vadd(\"points\", \"pt:A\", 1.0, 1.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Boolean> addPointB = reactiveCommands.vadd(\"points\", \"pt:B\", -1.0, -1.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Boolean> addPointC = reactiveCommands.vadd(\"points\", \"pt:C\", -1.0, 1.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Boolean> addPointD = reactiveCommands.vadd(\"points\", \"pt:D\", 1.0, -1.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Boolean> addPointE = reactiveCommands.vadd(\"points\", \"pt:E\", 1.0, 0.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Void> vaddOperations = Mono.when(addPointA, addPointB, addPointC, addPointD, addPointE)\n                    .then(reactiveCommands.type(\"points\")).doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> vectorset\n                    }).then();","section_id":"basic-operations"},{"id":"basic-operations-ex5","language":"java","code":"boolean res1 = jedis.vadd(\"points\", new float[] { 1.0f, 1.0f }, \"pt:A\");\n      System.out.println(res1); \/\/ >>> true\n\n      boolean res2 = jedis.vadd(\"points\", new float[] { -1.0f, -1.0f }, \"pt:B\");\n      System.out.println(res2); \/\/ >>> true\n\n      boolean res3 = jedis.vadd(\"points\", new float[] { -1.0f, 1.0f }, \"pt:C\");\n      System.out.println(res3); \/\/ >>> true\n\n      boolean res4 = jedis.vadd(\"points\", new float[] { 1.0f, -1.0f }, \"pt:D\");\n      System.out.println(res4); \/\/ >>> true\n\n      boolean res5 = jedis.vadd(\"points\", new float[] { 1.0f, 0.0f }, \"pt:E\");\n      System.out.println(res5); \/\/ >>> true\n\n      String res6 = jedis.type(\"points\");\n      System.out.println(res6); \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex6","language":"javascript","code":"const res1 = await client.vAdd(\"points\", [1.0, 1.0], \"pt:A\");\nconsole.log(res1);  \/\/ >>> true\n\nconst res2 = await client.vAdd(\"points\", [-1.0, -1.0], \"pt:B\");\nconsole.log(res2);  \/\/ >>> true\n\nconst res3 = await client.vAdd(\"points\", [-1.0, 1.0], \"pt:C\");\nconsole.log(res3);  \/\/ >>> true\n\nconst res4 = await client.vAdd(\"points\", [1.0, -1.0], \"pt:D\");\nconsole.log(res4);  \/\/ >>> true\n\nconst res5 = await client.vAdd(\"points\", [1.0, 0], \"pt:E\");\nconsole.log(res5);  \/\/ >>> true\n\nconst res6 = await client.type(\"points\");\nconsole.log(res6);  \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex7","language":"php","code":"$res1 = $r->vadd('points', [1.0, 1.0], 'pt:A');\n        echo $res1 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res2 = $r->vadd('points', [-1.0, -1.0], 'pt:B');\n        echo $res2 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res3 = $r->vadd('points', [-1.0, 1.0], 'pt:C');\n        echo $res3 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res4 = $r->vadd('points', [1.0, -1.0], 'pt:D');\n        echo $res4 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res5 = $r->vadd('points', [1.0, 0.0], 'pt:E');\n        echo $res5 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res6 = $r->type('points');\n        echo $res6 . PHP_EOL;\n        \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex8","language":"python","code":"res1 = r.vset().vadd(\"points\", [1.0, 1.0], \"pt:A\")\nprint(res1)  # >>> 1\n\nres2 = r.vset().vadd(\"points\", [-1.0, -1.0], \"pt:B\")\nprint(res2)  # >>> 1\n\nres3 = r.vset().vadd(\"points\", [-1.0, 1.0], \"pt:C\")\nprint(res3)  # >>> 1\n\nres4 = r.vset().vadd(\"points\", [1.0, -1.0], \"pt:D\")\nprint(res4)  # >>> 1\n\nres5 = r.vset().vadd(\"points\", [1.0, 0], \"pt:E\")\nprint(res5)  # >>> 1\n\nres6 = r.type(\"points\")\nprint(res6)  # >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex9","language":"rust","code":"if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, 1.0])),\n                \"pt:A\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::Float64(&[-1.0, -1.0])),\n                \"pt:B\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::Float64(&[-1.0, 1.0])),\n                \"pt:C\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, -1.0])),\n                \"pt:D\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, 0.0])),\n                \"pt:E\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        let res: String = cmd(\"TYPE\")\n            .arg(\"points\")\n            .query_async(&mut r)\n            .await\n            .expect(\"TYPE points should succeed\");\n        println!(\"{res}\"); \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex10","language":"rust","code":"if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, 1.0])),\n            \"pt:A\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::Float64(&[-1.0, -1.0])),\n            \"pt:B\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::Float64(&[-1.0, 1.0])),\n            \"pt:C\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, -1.0])),\n            \"pt:D\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::Float64(&[1.0, 0.0])),\n            \"pt:E\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        let res: String = cmd(\"TYPE\")\n            .arg(\"points\")\n            .query(&mut r)\n            .expect(\"TYPE points should succeed\");\n        println!(\"{res}\"); \/\/ >>> vectorset","section_id":"basic-operations"},{"id":"basic-operations-ex11","language":"plaintext","code":"> VCARD points\n(integer) 5\n> VDIM points\n(integer) 2","section_id":"basic-operations"},{"id":"basic-operations-ex12","language":"csharp","code":"long card = db.VectorSetLength(\"points\");\n        Console.WriteLine(card); \/\/ >>> 5\n\n        int dim = db.VectorSetDimension(\"points\");\n        Console.WriteLine(dim); \/\/ >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex13","language":"go","code":"res7, err := rdb.VCard(ctx, \"points\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res7) \/\/ >>> 5\n\n\tres8, err := rdb.VDim(ctx, \"points\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res8) \/\/ >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex14","language":"java","code":"CompletableFuture<Void> getCardinality = asyncCommands.vcard(\"points\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> 5\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> getDimensions = asyncCommands.vdim(\"points\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> 2\n            }).toCompletableFuture();","section_id":"basic-operations"},{"id":"basic-operations-ex15","language":"java","code":"Mono<Long> getCardinality = reactiveCommands.vcard(\"points\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> 5\n            });\n\n            Mono<Long> getDimensions = reactiveCommands.vdim(\"points\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> 2\n            });","section_id":"basic-operations"},{"id":"basic-operations-ex16","language":"java","code":"long res7 = jedis.vcard(\"points\");\n      System.out.println(res7); \/\/ >>> 5\n\n      long res8 = jedis.vdim(\"points\");\n      System.out.println(res8); \/\/ >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex17","language":"javascript","code":"const res7 = await client.vCard(\"points\");\nconsole.log(res7);  \/\/ >>> 5\n\nconst res8 = await client.vDim(\"points\");\nconsole.log(res8);  \/\/ >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex18","language":"php","code":"$res7 = $r->vcard('points');\n        echo $res7 . PHP_EOL;\n        \/\/ >>> 5\n\n        $res8 = $r->vdim('points');\n        echo $res8 . PHP_EOL;\n        \/\/ >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex19","language":"python","code":"res7 = r.vset().vcard(\"points\")\nprint(res7)  # >>> 5\n\nres8 = r.vset().vdim(\"points\")\nprint(res8)  # >>> 2","section_id":"basic-operations"},{"id":"basic-operations-ex20","language":"rust","code":"if let Ok(res) = r.vcard(\"points\").await {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 5\n        }\n\n        if let Ok(res) = r.vdim(\"points\").await {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 2\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex21","language":"rust","code":"if let Ok(res) = r.vcard(\"points\") {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 5\n        }\n\n        if let Ok(res) = r.vdim(\"points\") {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 2\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex22","language":"plaintext","code":"> VEMB points pt:A\n1) \"0.9999999403953552\"\n2) \"0.9999999403953552\"\n9> VEMB points pt:B\n1) \"-0.9999999403953552\"\n2) \"-0.9999999403953552\"\n> VEMB points pt:C\n1) \"-0.9999999403953552\"\n2) \"0.9999999403953552\"\n> VEMB points pt:D\n1) \"0.9999999403953552\"\n2) \"-0.9999999403953552\"\n> VEMB points pt:E\n1) \"1\"\n2) \"0\"","section_id":"basic-operations"},{"id":"basic-operations-ex23","language":"csharp","code":"using (Lease<float>? eA = db.VectorSetGetApproximateVector(\"points\", \"pt:A\"))\n        {\n            Span<float> a = eA!.Span;\n            Console.WriteLine($\"[{a[0]}, {a[1]}]\"); \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n        }\n        using (Lease<float>? eB = db.VectorSetGetApproximateVector(\"points\", \"pt:B\"))\n        {\n            Span<float> b = eB!.Span;\n            Console.WriteLine($\"[{b[0]}, {b[1]}]\"); \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n        }\n        using (Lease<float>? eC = db.VectorSetGetApproximateVector(\"points\", \"pt:C\"))\n        {\n            Span<float> c = eC!.Span;\n            Console.WriteLine($\"[{c[0]}, {c[1]}]\"); \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n        }\n        using (Lease<float>? eD = db.VectorSetGetApproximateVector(\"points\", \"pt:D\"))\n        {\n            Span<float> d = eD!.Span;\n            Console.WriteLine($\"[{d[0]}, {d[1]}]\"); \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n        }\n        using (Lease<float>? eE = db.VectorSetGetApproximateVector(\"points\", \"pt:E\"))\n        {\n            Span<float> e = eE!.Span;\n            Console.WriteLine($\"[{e[0]}, {e[1]}]\"); \/\/ >>> [1, 0]\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex24","language":"go","code":"res9, err := rdb.VEmb(ctx, \"points\", \"pt:A\", false).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res9) \/\/ >>> [0.9999999403953552 0.9999999403953552]\n\n\tres10, err := rdb.VEmb(ctx, \"points\", \"pt:B\", false).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res10) \/\/ >>> [-0.9999999403953552 -0.9999999403953552]\n\n\tres11, err := rdb.VEmb(ctx, \"points\", \"pt:C\", false).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res11) \/\/ >>> [-0.9999999403953552 0.9999999403953552]\n\n\tres12, err := rdb.VEmb(ctx, \"points\", \"pt:D\", false).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res12) \/\/ >>> [0.9999999403953552 -0.9999999403953552]\n\n\tres13, err := rdb.VEmb(ctx, \"points\", \"pt:E\", false).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res13) \/\/ >>> [1 0]","section_id":"basic-operations"},{"id":"basic-operations-ex25","language":"java","code":"CompletableFuture<Void> getEmbeddingA = asyncCommands.vemb(\"points\", \"pt:A\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> getEmbeddingB = asyncCommands.vemb(\"points\", \"pt:B\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> getEmbeddingC = asyncCommands.vemb(\"points\", \"pt:C\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> getEmbeddingD = asyncCommands.vemb(\"points\", \"pt:D\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> getEmbeddingE = asyncCommands.vemb(\"points\", \"pt:E\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [1.0, 0.0]\n            }).toCompletableFuture();","section_id":"basic-operations"},{"id":"basic-operations-ex26","language":"java","code":"Mono<java.util.List<Double>> getEmbeddingA = reactiveCommands.vemb(\"points\", \"pt:A\").collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n                    });\n\n            Mono<java.util.List<Double>> getEmbeddingB = reactiveCommands.vemb(\"points\", \"pt:B\").collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n                    });\n\n            Mono<java.util.List<Double>> getEmbeddingC = reactiveCommands.vemb(\"points\", \"pt:C\").collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n                    });\n\n            Mono<java.util.List<Double>> getEmbeddingD = reactiveCommands.vemb(\"points\", \"pt:D\").collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n                    });\n\n            Mono<java.util.List<Double>> getEmbeddingE = reactiveCommands.vemb(\"points\", \"pt:E\").collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [1.0, 0.0]\n                    });","section_id":"basic-operations"},{"id":"basic-operations-ex27","language":"java","code":"List<Double> res9 = jedis.vemb(\"points\", \"pt:A\");\n      System.out.println(res9); \/\/ >>> [0.9999999..., 0.9999999...]\n\n      List<Double> res10 = jedis.vemb(\"points\", \"pt:B\");\n      System.out.println(res10); \/\/ >>> [-0.9999999..., -0.9999999...]\n\n      List<Double> res11 = jedis.vemb(\"points\", \"pt:C\");\n      System.out.println(res11); \/\/ >>> [-0.9999999..., 0.9999999...]\n\n      List<Double> res12 = jedis.vemb(\"points\", \"pt:D\");\n      System.out.println(res12); \/\/ >>> [0.9999999..., -0.9999999...]\n\n      List<Double> res13 = jedis.vemb(\"points\", \"pt:E\");\n      System.out.println(res13); \/\/ >>> [1, 0]","section_id":"basic-operations"},{"id":"basic-operations-ex28","language":"javascript","code":"const res9 = await client.vEmb(\"points\", \"pt:A\");\nconsole.log(res9);  \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n\nconst res10 = await client.vEmb(\"points\", \"pt:B\");\nconsole.log(res10);  \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n\nconst res11 = await client.vEmb(\"points\", \"pt:C\");\nconsole.log(res11);  \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n\nconst res12 = await client.vEmb(\"points\", \"pt:D\");\nconsole.log(res12);  \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n\nconst res13 = await client.vEmb(\"points\", \"pt:E\");\nconsole.log(res13);  \/\/ >>> [1, 0]","section_id":"basic-operations"},{"id":"basic-operations-ex29","language":"php","code":"$res9 = $r->vemb('points', 'pt:A');\n        echo json_encode($res9) . PHP_EOL;\n        \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n\n        $res10 = $r->vemb('points', 'pt:B');\n        echo json_encode($res10) . PHP_EOL;\n        \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n\n        $res11 = $r->vemb('points', 'pt:C');\n        echo json_encode($res11) . PHP_EOL;\n        \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n\n        $res12 = $r->vemb('points', 'pt:D');\n        echo json_encode($res12) . PHP_EOL;\n        \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n\n        $res13 = $r->vemb('points', 'pt:E');\n        echo json_encode($res13) . PHP_EOL;\n        \/\/ >>> [1,0]","section_id":"basic-operations"},{"id":"basic-operations-ex30","language":"python","code":"res9 = r.vset().vemb(\"points\", \"pt:A\")\nprint(res9)  # >>> [0.9999999403953552, 0.9999999403953552]\n\nres10 = r.vset().vemb(\"points\", \"pt:B\")\nprint(res10)  # >>> [-0.9999999403953552, -0.9999999403953552]\n\nres11 = r.vset().vemb(\"points\", \"pt:C\")\nprint(res11)  # >>> [-0.9999999403953552, 0.9999999403953552]\n\nres12 = r.vset().vemb(\"points\", \"pt:D\")\nprint(res12)  # >>> [0.9999999403953552, -0.9999999403953552]\n\nres13 = r.vset().vemb(\"points\", \"pt:E\")\nprint(res13)  # >>> [1, 0]","section_id":"basic-operations"},{"id":"basic-operations-ex31","language":"rust","code":"if let Ok(res) = r.vemb(\"points\", \"pt:A\").await {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:B\").await {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:C\").await {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:D\").await {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:E\").await {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\"); \/\/ >>> [1.0, 0.0]\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex32","language":"rust","code":"if let Ok(res) = r.vemb(\"points\", \"pt:A\") {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [0.9999999403953552, 0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:B\") {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [-0.9999999403953552, -0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:C\") {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [-0.9999999403953552, 0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:D\") {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\");\n            \/\/ >>> [0.9999999403953552, -0.9999999403953552]\n        }\n\n        if let Ok(res) = r.vemb(\"points\", \"pt:E\") {\n            let res: Vec<f64> = res;\n            println!(\"{res:?}\"); \/\/ >>> [1.0, 0.0]\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex33","language":"plaintext","code":"> VADD points VALUES 2 0 0 pt:F\n(integer) 1\n> VCARD points\n(integer) 6\n> VREM points pt:F\n(integer) 1\n> VCARD points\n(integer) 5","section_id":"basic-operations"},{"id":"basic-operations-ex34","language":"csharp","code":"bool addF = db.VectorSetAdd(\"points\", VectorSetAddRequest.Member(\"pt:F\", new float[] { 0f, 0f }, null));\n        Console.WriteLine(addF); \/\/ >>> True\n\n        long card1 = db.VectorSetLength(\"points\");\n        Console.WriteLine(card1); \/\/ >>> 6\n\n        bool remF = db.VectorSetRemove(\"points\", \"pt:F\");\n        Console.WriteLine(remF); \/\/ >>> True\n\n        long card2 = db.VectorSetLength(\"points\");\n        Console.WriteLine(card2); \/\/ >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex35","language":"go","code":"res18, err := rdb.VAdd(ctx, \"points\", \"pt:F\",\n\t\t&redis.VectorValues{Val: []float64{0.0, 0.0}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res18) \/\/ >>> true\n\n\tres19, err := rdb.VCard(ctx, \"points\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res19) \/\/ >>> 6\n\n\tres20, err := rdb.VRem(ctx, \"points\", \"pt:F\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res20) \/\/ >>> true\n\n\tres21, err := rdb.VCard(ctx, \"points\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res21) \/\/ >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex36","language":"java","code":"CompletableFuture<Void> addTempPointF = asyncCommands.vadd(\"points\", \"pt:F\", 0.0, 0.0).thenAccept(result -> {\n                System.out.println(result); \/\/ >>> true\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> checkCardinalityBefore = asyncCommands.vcard(\"points\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> 6\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> removePointF = asyncCommands.vrem(\"points\", \"pt:F\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> true\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> checkCardinalityAfter = asyncCommands.vcard(\"points\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> 5\n            }).toCompletableFuture();","section_id":"basic-operations"},{"id":"basic-operations-ex37","language":"java","code":"Mono<Boolean> addTempPointF = reactiveCommands.vadd(\"points\", \"pt:F\", 0.0, 0.0).doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Long> checkCardinalityBefore = reactiveCommands.vcard(\"points\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> 6\n            });\n\n            Mono<Boolean> removePointF = reactiveCommands.vrem(\"points\", \"pt:F\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<Long> checkCardinalityAfter = reactiveCommands.vcard(\"points\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> 5\n            });","section_id":"basic-operations"},{"id":"basic-operations-ex38","language":"java","code":"boolean res18 = jedis.vadd(\"points\", new float[] { 0.0f, 0.0f }, \"pt:F\");\n      System.out.println(res18); \/\/ >>> true\n\n      long res19 = jedis.vcard(\"points\");\n      System.out.println(res19); \/\/ >>> 6\n\n      boolean res20 = jedis.vrem(\"points\", \"pt:F\");\n      System.out.println(res20); \/\/ >>> true\n\n      long res21 = jedis.vcard(\"points\");\n      System.out.println(res21); \/\/ >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex39","language":"javascript","code":"const res18 = await client.vAdd(\"points\", [0, 0], \"pt:F\");\nconsole.log(res18);  \/\/ >>> true\n\nconst res19 = await client.vCard(\"points\");\nconsole.log(res19);  \/\/ >>> 6\n\nconst res20 = await client.vRem(\"points\", \"pt:F\");\nconsole.log(res20);  \/\/ >>> true\n\nconst res21 = await client.vCard(\"points\");\nconsole.log(res21);  \/\/ >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex40","language":"php","code":"$res18 = $r->vadd('points', [0, 0], 'pt:F');\n        echo $res18 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res19 = $r->vcard('points');\n        echo $res19 . PHP_EOL;\n        \/\/ >>> 6\n\n        $res20 = $r->vrem('points', 'pt:F');\n        echo $res20 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res21 = $r->vcard('points');\n        echo $res21 . PHP_EOL;\n        \/\/ >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex41","language":"python","code":"res18 = r.vset().vadd(\"points\", [0, 0], \"pt:F\")\nprint(res18)  # >>> 1\n\nres19 = r.vset().vcard(\"points\")\nprint(res19)  # >>> 6\n\nres20 = r.vset().vrem(\"points\", \"pt:F\")\nprint(res20)  # >>> 1\n\nres21 = r.vset().vcard(\"points\")\nprint(res21)  # >>> 5","section_id":"basic-operations"},{"id":"basic-operations-ex42","language":"rust","code":"if let Ok(res) = r\n            .vadd(\n                \"points\",\n                VectorAddInput::Values(EmbeddingInput::String(&[\"0\", \"0\"])),\n                \"pt:F\",\n            )\n            .await\n        {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vcard(\"points\").await {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 6\n        }\n\n        if let Ok(res) = r.vrem(\"points\", \"pt:F\").await {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vcard(\"points\").await {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 5\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex43","language":"rust","code":"if let Ok(res) = r.vadd(\n            \"points\",\n            VectorAddInput::Values(EmbeddingInput::String(&[\"0\", \"0\"])),\n            \"pt:F\",\n        ) {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vcard(\"points\") {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 6\n        }\n\n        if let Ok(res) = r.vrem(\"points\", \"pt:F\") {\n            let res: bool = res;\n            println!(\"{res}\"); \/\/ >>> true\n        }\n\n        if let Ok(res) = r.vcard(\"points\") {\n            let res: usize = res;\n            println!(\"{res}\"); \/\/ >>> 5\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex44","language":"plaintext","code":"> VSETATTR points pt:A \"{\\\"name\\\": \\\"Point A\\\", \\\"description\\\": \\\"First point added\\\"}\"\n(integer) 1\n> VGETATTR points pt:A\n\"{\\\"name\\\": \\\"Point A\\\", \\\"description\\\": \\\"First point added\\\"}\"\n> VSETATTR points pt:A \"\"\n(integer) 1\n> VGETATTR points pt:A\n(nil)","section_id":"basic-operations"},{"id":"basic-operations-ex45","language":"csharp","code":"string attrJson = \"{\\\"name\\\":\\\"Point A\\\",\\\"description\\\":\\\"First point added\\\"}\";\n        bool setAttr1 = db.VectorSetSetAttributesJson(\"points\", \"pt:A\", attrJson);\n        Console.WriteLine(setAttr1); \/\/ >>> True\n\n        string? getAttr1 = db.VectorSetGetAttributesJson(\"points\", \"pt:A\");\n        Console.WriteLine(getAttr1); \/\/ >>> {\"name\":\"Point A\",\"description\":\"First point added\"}\n\n        bool clearAttr = db.VectorSetSetAttributesJson(\"points\", \"pt:A\", \"\");\n        Console.WriteLine(clearAttr); \/\/ >>> True\n\n        string? getAttr2 = db.VectorSetGetAttributesJson(\"points\", \"pt:A\");\n        Console.WriteLine(getAttr2 is null ? \"None\" : getAttr2); \/\/ >>> None","section_id":"basic-operations"},{"id":"basic-operations-ex46","language":"go","code":"attrs := map[string]interface{}{\n\t\t\"name\":        \"Point A\",\n\t\t\"description\": \"First point added\",\n\t}\n\n\tres14, err := rdb.VSetAttr(ctx, \"points\", \"pt:A\", attrs).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res14) \/\/ >>> true\n\n\tres15, err := rdb.VGetAttr(ctx, \"points\", \"pt:A\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res15)\n\t\/\/ >>> {\"description\":\"First point added\",\"name\":\"Point A\"}\n\n\tres16, err := rdb.VClearAttributes(ctx, \"points\", \"pt:A\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res16) \/\/ >>> true\n\n\t\/\/ `VGetAttr()` returns an error if the attribute doesn't exist.\n\t_, err = rdb.VGetAttr(ctx, \"points\", \"pt:A\").Result()\n\n\tif err != nil {\n\t\tfmt.Println(err)\n\t}","section_id":"basic-operations"},{"id":"basic-operations-ex47","language":"java","code":"CompletableFuture<Void> setAttributeA = asyncCommands\n                    .vsetattr(\"points\", \"pt:A\", \"{\\\"name\\\": \\\"Point A\\\", \\\"description\\\": \\\"First point added\\\"}\")\n                    .thenAccept(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).toCompletableFuture();\n\n            CompletableFuture<Void> getAttributeA = asyncCommands.vgetattr(\"points\", \"pt:A\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> {\"name\": \"Point A\", \"description\": \"First point added\"}\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> clearAttributeA = asyncCommands.vsetattr(\"points\", \"pt:A\", \"\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> true\n            }).toCompletableFuture();\n\n            CompletableFuture<Void> verifyAttributeCleared = asyncCommands.vgetattr(\"points\", \"pt:A\").thenAccept(result -> {\n                System.out.println(result); \/\/ >>> null\n            }).toCompletableFuture();","section_id":"basic-operations"},{"id":"basic-operations-ex48","language":"java","code":"Mono<Boolean> setAttributeA = reactiveCommands\n                    .vsetattr(\"points\", \"pt:A\", \"{\\\"name\\\": \\\"Point A\\\", \\\"description\\\": \\\"First point added\\\"}\")\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    });\n\n            Mono<String> getAttributeA = reactiveCommands.vgetattr(\"points\", \"pt:A\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> {\"name\": \"Point A\", \"description\": \"First point added\"}\n            });\n\n            Mono<Boolean> clearAttributeA = reactiveCommands.vsetattr(\"points\", \"pt:A\", \"\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> true\n            });\n\n            Mono<String> verifyAttributeCleared = reactiveCommands.vgetattr(\"points\", \"pt:A\").doOnNext(result -> {\n                System.out.println(result); \/\/ >>> null\n            });","section_id":"basic-operations"},{"id":"basic-operations-ex49","language":"java","code":"boolean res14 = jedis.vsetattr(\"points\", \"pt:A\",\n        \"{\\\"name\\\":\\\"Point A\\\",\\\"description\\\":\\\"First point added\\\"}\");\n      System.out.println(res14); \/\/ >>> true\n\n      String res15 = jedis.vgetattr(\"points\", \"pt:A\");\n      System.out.println(res15);\n      \/\/ >>> {\"name\":\"Point A\",\"description\":\"First point added\"}\n\n      boolean res16 = jedis.vsetattr(\"points\", \"pt:A\", \"\");\n      System.out.println(res16); \/\/ >>> true\n\n      String res17 = jedis.vgetattr(\"points\", \"pt:A\");\n      System.out.println(res17); \/\/ >>> null","section_id":"basic-operations"},{"id":"basic-operations-ex50","language":"javascript","code":"const res14 = await client.vSetAttr(\"points\", \"pt:A\", {\n  name: \"Point A\",\n  description: \"First point added\"\n});\nconsole.log(res14);  \/\/ >>> true\n\nconst res15 = await client.vGetAttr(\"points\", \"pt:A\");\nconsole.log(res15);\n\/\/ >>> {name: 'Point A', description: 'First point added'}\n\nconst res16 = await client.vSetAttr(\"points\", \"pt:A\", \"\");\nconsole.log(res16);  \/\/ >>> true\n\nconst res17 = await client.vGetAttr(\"points\", \"pt:A\");\nconsole.log(res17);  \/\/ >>> null","section_id":"basic-operations"},{"id":"basic-operations-ex51","language":"php","code":"$res14 = $r->vsetattr('points', 'pt:A', '{\n            \"name\": \"Point A\",\n            \"description\": \"First point added\"\n        }');\n        echo $res14 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res15 = $r->vgetattr('points', 'pt:A');\n        echo json_encode($res15) . PHP_EOL;\n        \/\/ >>> {\"name\":\"Point A\",\"description\":\"First point added\"}\n\n        $res16 = $r->vsetattr('points', 'pt:A', '');\n        echo $res16 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res17 = $r->vgetattr('points', 'pt:A');\n        echo json_encode($res17) . PHP_EOL;\n        \/\/ >>> null","section_id":"basic-operations"},{"id":"basic-operations-ex52","language":"python","code":"res14 = r.vset().vsetattr(\"points\", \"pt:A\", {\n    \"name\": \"Point A\",\n    \"description\": \"First point added\"\n})\nprint(res14)  # >>> 1\n\nres15 = r.vset().vgetattr(\"points\", \"pt:A\")\nprint(res15)\n# >>> {'name': 'Point A', 'description': 'First point added'}\n\nres16 = r.vset().vsetattr(\"points\", \"pt:A\", \"\")\nprint(res16)  # >>> 1\n\nres17 = r.vset().vgetattr(\"points\", \"pt:A\")\nprint(res17)  # >>> None","section_id":"basic-operations"},{"id":"basic-operations-ex53","language":"rust","code":"let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"{\\\"name\\\":\\\"Point A\\\",\\\"description\\\":\\\"First point added\\\"}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        if let Ok(res) = r.vgetattr(\"points\", \"pt:A\").await {\n            let res: Option<String> = res;\n            println!(\n                \"{}\",\n                res.clone().unwrap_or_else(|| \"None\".to_string())\n            );\n            \/\/ >>> {\"name\":\"Point A\",\"description\":\"First point added\"}\n        }\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR clear should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        if let Ok(res) = r.vgetattr(\"points\", \"pt:A\").await {\n            let res: Option<String> = res;\n            println!(\n                \"{}\",\n                res.clone().unwrap_or_else(|| \"None\".to_string())\n            ); \/\/ >>> None\n        }","section_id":"basic-operations"},{"id":"basic-operations-ex54","language":"rust","code":"let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"{\\\"name\\\":\\\"Point A\\\",\\\"description\\\":\\\"First point added\\\"}\")\n            .query(&mut r)\n            .expect(\"VSETATTR should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        if let Ok(res) = r.vgetattr(\"points\", \"pt:A\") {\n            let res: Option<String> = res;\n            println!(\n                \"{}\",\n                res.clone().unwrap_or_else(|| \"None\".to_string())\n            );\n            \/\/ >>> {\"name\":\"Point A\",\"description\":\"First point added\"}\n        }\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"\")\n            .query(&mut r)\n            .expect(\"VSETATTR clear should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        if let Ok(res) = r.vgetattr(\"points\", \"pt:A\") {\n            let res: Option<String> = res;\n            println!(\n                \"{}\",\n                res.clone().unwrap_or_else(|| \"None\".to_string())\n            ); \/\/ >>> None\n        }","section_id":"basic-operations"},{"id":"vector-similarity-search-ex0","language":"plaintext","code":"> VSIM points values 2 0.9 0.1\n1) \"pt:E\"\n2) \"pt:A\"\n3) \"pt:D\"\n4) \"pt:C\"\n5) \"pt:B\"","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex1","language":"csharp","code":"VectorSetSimilaritySearchRequest qBasic = VectorSetSimilaritySearchRequest.ByVector(new float[] { 0.9f, 0.1f });\n        using (Lease<VectorSetSimilaritySearchResult>? res = db.VectorSetSimilaritySearch(\"points\", qBasic))\n        {\n            VectorSetSimilaritySearchResult[] items = res!.Span.ToArray();\n            string[] ordered = items.Select(x => (string?)x.Member).Where(s => s is not null).Select(s => s!).ToArray();\n            Console.WriteLine(\"[\" + string.Join(\", \", ordered.Select(s => $\"'{s}'\")) + \"]\");\n            \/\/ >>> ['pt:E', 'pt:A', 'pt:D', 'pt:C', 'pt:B']\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex2","language":"go","code":"res22, err := rdb.VSim(ctx, \"points\",\n\t\t&redis.VectorValues{Val: []float64{0.9, 0.1}},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res22) \/\/ >>> [pt:E pt:A pt:D pt:C pt:B]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex3","language":"java","code":"CompletableFuture<Void> basicSimilaritySearch = asyncCommands.vsim(\"points\", 0.9, 0.1).thenAccept(result -> {\n                System.out.println(result); \/\/ >>> [pt:E, pt:A, pt:D, pt:C, pt:B]\n            }).toCompletableFuture();","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex4","language":"java","code":"Mono<java.util.List<String>> basicSimilaritySearch = reactiveCommands.vsim(\"points\", 0.9, 0.1).collectList()\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [pt:E, pt:A, pt:D, pt:C, pt:B]\n                    });","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex5","language":"java","code":"List<String> res22 = jedis.vsim(\"points\", new float[] { 0.9f, 0.1f });\n      System.out.println(res22);\n      \/\/ >>> [\"pt:E\", \"pt:A\", \"pt:D\", \"pt:C\", \"pt:B\"]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex6","language":"javascript","code":"const res22 = await client.vSim(\"points\", [0.9, 0.1]);\nconsole.log(res22);\n\/\/ >>> ['pt:E', 'pt:A', 'pt:D', 'pt:C', 'pt:B']","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex7","language":"php","code":"$res22 = $r->vsim('points', [0.9, 0.1]);\n        echo json_encode($res22) . PHP_EOL;\n        \/\/ >>> [\"pt:E\",\"pt:A\",\"pt:D\",\"pt:C\",\"pt:B\"]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex8","language":"python","code":"res22 = r.vset().vsim(\"points\", [0.9, 0.1])\nprint(res22)\n# >>> ['pt:E', 'pt:A', 'pt:D', 'pt:C', 'pt:B']","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex9","language":"rust","code":"if let Ok(res) = r\n            .vsim(\n                \"points\",\n                VectorSimilaritySearchInput::Values(EmbeddingInput::Float64(&[0.9, 0.1])),\n            )\n            .await\n        {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:E\", \"pt:A\", \"pt:D\", \"pt:C\", \"pt:B\"]\n            }\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex10","language":"rust","code":"if let Ok(res) = r.vsim(\n            \"points\",\n            VectorSimilaritySearchInput::Values(EmbeddingInput::Float64(&[0.9, 0.1])),\n        ) {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:E\", \"pt:A\", \"pt:D\", \"pt:C\", \"pt:B\"]\n            }\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex11","language":"plaintext","code":"> VSIM points ELE pt:A WITHSCORES COUNT 4\n1) \"pt:A\"\n2) \"1\"\n3) \"pt:E\"\n4) \"0.8535534143447876\"\n5) \"pt:C\"\n6) \"0.5\"\n7) \"pt:D\"\n8) \"0.5\"","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex12","language":"csharp","code":"VectorSetSimilaritySearchRequest qOpts = VectorSetSimilaritySearchRequest.ByMember(\"pt:A\");\n        qOpts.WithScores = true;\n        qOpts.Count = 4;\n        using (Lease<VectorSetSimilaritySearchResult>? res = db.VectorSetSimilaritySearch(\"points\", qOpts))\n        {\n            VectorSetSimilaritySearchResult[] items = res!.Span.ToArray();\n            Dictionary<string, double> dict = items\n                .Select(i => new { Key = (string?)i.Member, i.Score })\n                .Where(x => x.Key is not null)\n                .ToDictionary(x => x.Key!, x => x.Score);\n            Console.WriteLine(\"{\" + string.Join(\", \", dict.Select(kv => $\"'{kv.Key}': {kv.Value}\")) + \"}\");\n            \/\/ >>> {'pt:A': 1.0, 'pt:E': 0.8535534143447876, 'pt:D': 0.5, 'pt:C': 0.5}\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex13","language":"go","code":"res23, err := rdb.VSimWithArgsWithScores(\n\t\tctx,\n\t\t\"points\",\n\t\t&redis.VectorRef{Name: \"pt:A\"},\n\t\t&redis.VSimArgs{Count: 4},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tsort.Slice(res23, func(i, j int) bool {\n\t\treturn res23[i].Name < res23[j].Name\n\t})\n\n\tfmt.Println(res23)\n\t\/\/ >>> [{pt:A 1} {pt:C 0.5} {pt:D 0.5} {pt:E 0.8535534143447876}]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex14","language":"java","code":"VSimArgs vsimArgs = new VSimArgs();\n            vsimArgs.count(4L);\n            CompletableFuture<Void> similaritySearchWithScore = asyncCommands.vsimWithScore(\"points\", vsimArgs, \"pt:A\")\n                    .thenAccept(result -> {\n                        System.out.println(result); \/\/ >>> {pt:A=1.0, pt:E=0.8535534143447876, pt:D=0.5, pt:C=0.5}\n                    }).toCompletableFuture();","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex15","language":"java","code":"VSimArgs vsimArgs = new VSimArgs();\n            vsimArgs.count(4L);\n            Mono<java.util.Map<String, Double>> similaritySearchWithScore = reactiveCommands\n                    .vsimWithScore(\"points\", vsimArgs, \"pt:A\").doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> {pt:A=1.0, pt:E=0.8535534143447876, pt:D=0.5, pt:C=0.5}\n                    });","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex16","language":"java","code":"Map<String, Double> res23 = jedis.vsimByElementWithScores(\"points\", \"pt:A\",\n        new VSimParams().count(4));\n      System.out.println(res23);\n      \/\/ >>> {pt:A=1.0, pt:E\u22480.85355, pt:D=0.5, pt:C=0.5}","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex17","language":"javascript","code":"const res23 = await client.vSimWithScores(\"points\", \"pt:A\", { COUNT: 4 });\nconsole.log(res23);\n\/\/ >>> {pt:A: 1.0, pt:E: 0.8535534143447876, pt:D: 0.5, pt:C: 0.5}","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex18","language":"php","code":"\/\/ Returns an array of elements with their scores:\n        \/\/      ['pt:A' => 1.0, 'pt:E' => 0.8535534143447876,...\n        $res23 = $r->vsim(\n            'points', 'pt:A', true,true, 4,\n        );\n        echo json_encode($res23) . PHP_EOL;\n        \/\/ >>> {'pt:A': 1.0, 'pt:E': 0.8535534143447876, 'pt:D': 0.5, 'pt:C': 0.5}","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex19","language":"python","code":"res23 = r.vset().vsim(\n    \"points\", \"pt:A\",\n    with_scores=True,\n    count=4\n)\nprint(res23)\n# >>> {'pt:A': 1.0, 'pt:E': 0.8535534143447876, 'pt:D': 0.5, 'pt:C': 0.5}","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex20","language":"rust","code":"let opts = VSimOptions::default().set_with_scores(true).set_count(4);\n        if let Ok(res) = r\n            .vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n            .await\n        {\n            let res: Value = res;\n            let mut view: Vec<(String, f64)> = match res {\n                Value::Array(items) => items\n                    .chunks(2)\n                    .map(|chunk| {\n                        let member = match &chunk[0] {\n                            Value::BulkString(bytes) => {\n                                String::from_utf8(bytes.clone()).expect(\"utf8\")\n                            }\n                            Value::SimpleString(s) => s.clone(),\n                            other => panic!(\"Unexpected member format: {other:?}\"),\n                        };\n                        let score = match &chunk[1] {\n                            Value::BulkString(bytes) => String::from_utf8(bytes.clone())\n                                .expect(\"utf8\")\n                                .parse::<f64>()\n                                .expect(\"score\"),\n                            Value::SimpleString(s) => s.parse::<f64>().expect(\"score\"),\n                            Value::Double(v) => *v,\n                            Value::Int(v) => *v as f64,\n                            other => panic!(\"Unexpected score format: {other:?}\"),\n                        };\n                        (member, score)\n                    })\n                    .collect(),\n                Value::Map(items) => items\n                    .into_iter()\n                    .map(|(member, score)| {\n                        let member = match member {\n                            Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                            Value::SimpleString(s) => s,\n                            other => panic!(\"Unexpected member format: {other:?}\"),\n                        };\n                        let score = match score {\n                            Value::BulkString(bytes) => String::from_utf8(bytes)\n                                .expect(\"utf8\")\n                                .parse::<f64>()\n                                .expect(\"score\"),\n                            Value::SimpleString(s) => s.parse::<f64>().expect(\"score\"),\n                            Value::Double(v) => v,\n                            Value::Int(v) => v as f64,\n                            other => panic!(\"Unexpected score format: {other:?}\"),\n                        };\n                        (member, score)\n                    })\n                    .collect(),\n                other => panic!(\"Unexpected VSIM WITHSCORES response: {other:?}\"),\n            };\n            view.sort_by(|a, b| {\n                b.1.partial_cmp(&a.1)\n                    .unwrap_or(std::cmp::Ordering::Equal)\n                    .then_with(|| b.0.cmp(&a.0))\n            });\n            println!(\"{view:?}\");\n            \/\/ >>> [(\"pt:A\", 1.0), (\"pt:E\", 0.8535534143447876), (\"pt:D\", 0.5), (\"pt:C\", 0.5)]\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex21","language":"rust","code":"let opts = VSimOptions::default().set_with_scores(true).set_count(4);\n        if let Ok(res) =\n            r.vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n        {\n            let res: Value = res;\n            let mut view: Vec<(String, f64)> = match res {\n                Value::Array(items) => items\n                    .chunks(2)\n                    .map(|chunk| {\n                        let member = match &chunk[0] {\n                            Value::BulkString(bytes) => {\n                                String::from_utf8(bytes.clone()).expect(\"utf8\")\n                            }\n                            Value::SimpleString(s) => s.clone(),\n                            other => panic!(\"Unexpected member format: {other:?}\"),\n                        };\n                        let score = match &chunk[1] {\n                            Value::BulkString(bytes) => String::from_utf8(bytes.clone())\n                                .expect(\"utf8\")\n                                .parse::<f64>()\n                                .expect(\"score\"),\n                            Value::SimpleString(s) => s.parse::<f64>().expect(\"score\"),\n                            Value::Double(v) => *v,\n                            Value::Int(v) => *v as f64,\n                            other => panic!(\"Unexpected score format: {other:?}\"),\n                        };\n                        (member, score)\n                    })\n                    .collect(),\n                Value::Map(items) => items\n                    .into_iter()\n                    .map(|(member, score)| {\n                        let member = match member {\n                            Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                            Value::SimpleString(s) => s,\n                            other => panic!(\"Unexpected member format: {other:?}\"),\n                        };\n                        let score = match score {\n                            Value::BulkString(bytes) => String::from_utf8(bytes)\n                                .expect(\"utf8\")\n                                .parse::<f64>()\n                                .expect(\"score\"),\n                            Value::SimpleString(s) => s.parse::<f64>().expect(\"score\"),\n                            Value::Double(v) => v,\n                            Value::Int(v) => v as f64,\n                            other => panic!(\"Unexpected score format: {other:?}\"),\n                        };\n                        (member, score)\n                    })\n                    .collect(),\n                other => panic!(\"Unexpected VSIM WITHSCORES response: {other:?}\"),\n            };\n            view.sort_by(|a, b| {\n                b.1.partial_cmp(&a.1)\n                    .unwrap_or(std::cmp::Ordering::Equal)\n                    .then_with(|| b.0.cmp(&a.0))\n            });\n            println!(\"{view:?}\");\n            \/\/ >>> [(\"pt:A\", 1.0), (\"pt:E\", 0.8535534143447876), (\"pt:D\", 0.5), (\"pt:C\", 0.5)]\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex22","language":"plaintext","code":"> VSETATTR points pt:A \"{\\\"size\\\":\\\"large\\\",\\\"price\\\": 18.99}\"\n(integer) 1\n> VSETATTR points pt:B \"{\\\"size\\\":\\\"large\\\",\\\"price\\\": 35.99}\"\n(integer) 1\n> VSETATTR points pt:C \"{\\\"size\\\":\\\"large\\\",\\\"price\\\": 25.99}\"\n(integer) 1\n> VSETATTR points pt:D \"{\\\"size\\\":\\\"small\\\",\\\"price\\\": 21.00}\"\n(integer) 1\n> VSETATTR points pt:E \"{\\\"size\\\":\\\"small\\\",\\\"price\\\": 17.75}\"\n(integer) 1\n\n# Return elements in order of distance from point A whose\n# `size` attribute is `large`.\n> VSIM points ELE pt:A FILTER '.size == \"large\"'\n1) \"pt:A\"\n2) \"pt:C\"\n3) \"pt:B\"\n\n# Return elements in order of distance from point A whose size is\n# `large` and whose price is greater than 20.00.\n> VSIM points ELE pt:A FILTER '.size == \"large\" && .price > 20.00'\n1) \"pt:C\"\n2) \"pt:B\"","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex23","language":"csharp","code":"bool okA = db.VectorSetSetAttributesJson(\"points\", \"pt:A\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":18.99}\");\n        Console.WriteLine(okA); \/\/ >>> True\n        bool okB = db.VectorSetSetAttributesJson(\"points\", \"pt:B\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":35.99}\");\n        Console.WriteLine(okB); \/\/ >>> True\n        bool okC = db.VectorSetSetAttributesJson(\"points\", \"pt:C\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":25.99}\");\n        Console.WriteLine(okC); \/\/ >>> True\n        bool okD = db.VectorSetSetAttributesJson(\"points\", \"pt:D\", \"{\\\"size\\\":\\\"small\\\",\\\"price\\\":21.00}\");\n        Console.WriteLine(okD); \/\/ >>> True\n        bool okE = db.VectorSetSetAttributesJson(\"points\", \"pt:E\", \"{\\\"size\\\":\\\"small\\\",\\\"price\\\":17.75}\");\n        Console.WriteLine(okE); \/\/ >>> True\n\n        VectorSetSimilaritySearchRequest qFilt1 = VectorSetSimilaritySearchRequest.ByMember(\"pt:A\");\n        qFilt1.FilterExpression = \".size == \\\"large\\\"\";\n        using (Lease<VectorSetSimilaritySearchResult>? res = db.VectorSetSimilaritySearch(\"points\", qFilt1))\n        {\n            string[] ids = res!.Span.ToArray()\n                .Select(i => (string?)i.Member)\n                .Where(s => s is not null)\n                .Select(s => s!)\n                .ToArray();\n            Console.WriteLine(\"[\" + string.Join(\", \", ids.Select(s => $\"'{s}'\")) + \"]\");\n            \/\/ >>> ['pt:A', 'pt:C', 'pt:B']\n\n        }\n\n        VectorSetSimilaritySearchRequest qFilt2 = VectorSetSimilaritySearchRequest.ByMember(\"pt:A\");\n        qFilt2.FilterExpression = \".size == \\\"large\\\" && .price > 20.00\";\n        using (Lease<VectorSetSimilaritySearchResult>? res = db.VectorSetSimilaritySearch(\"points\", qFilt2))\n        {\n            string[] ids = res!.Span.ToArray()\n                .Select(i => (string?)i.Member)\n                .Where(s => s is not null)\n                .Select(s => s!)\n                .ToArray();\n            Console.WriteLine(\"[\" + string.Join(\", \", ids.Select(s => $\"'{s}'\")) + \"]\");\n            \/\/ >>> ['pt:C', 'pt:B']\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex24","language":"go","code":"\/\/ Set attributes for filtering\n\tres24, err := rdb.VSetAttr(ctx, \"points\", \"pt:A\",\n\t\tmap[string]interface{}{\n\t\t\t\"size\":  \"large\",\n\t\t\t\"price\": 18.99,\n\t\t},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res24) \/\/ >>> true\n\n\tres25, err := rdb.VSetAttr(ctx, \"points\", \"pt:B\",\n\t\tmap[string]interface{}{\n\t\t\t\"size\":  \"large\",\n\t\t\t\"price\": 35.99,\n\t\t},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res25) \/\/ >>> true\n\n\tres26, err := rdb.VSetAttr(ctx, \"points\", \"pt:C\",\n\t\tmap[string]interface{}{\n\t\t\t\"size\":  \"large\",\n\t\t\t\"price\": 25.99,\n\t\t},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res26) \/\/ >>> true\n\n\tres27, err := rdb.VSetAttr(ctx, \"points\", \"pt:D\",\n\t\tmap[string]interface{}{\n\t\t\t\"size\":  \"small\",\n\t\t\t\"price\": 21.00,\n\t\t},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res27) \/\/ >>> true\n\n\tres28, err := rdb.VSetAttr(ctx, \"points\", \"pt:E\",\n\t\tmap[string]interface{}{\n\t\t\t\"size\":  \"small\",\n\t\t\t\"price\": 17.75,\n\t\t},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res28) \/\/ >>> true\n\n\t\/\/ Return elements in order of distance from point A whose\n\t\/\/ `size` attribute is `large`.\n\tres29, err := rdb.VSimWithArgs(ctx, \"points\",\n\t\t&redis.VectorRef{Name: \"pt:A\"},\n\t\t&redis.VSimArgs{Filter: `.size == \"large\"`},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res29) \/\/ >>> [pt:A pt:C pt:B]\n\n\t\/\/ Return elements in order of distance from point A whose size is\n\t\/\/ `large` and whose price is greater than 20.00.\n\tres30, err := rdb.VSimWithArgs(ctx, \"points\",\n\t\t&redis.VectorRef{Name: \"pt:A\"},\n\t\t&redis.VSimArgs{Filter: `.size == \"large\" && .price > 20.00`},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res30) \/\/ >>> [pt:C pt:B]\n\n\tres31, err := rdb.VIsMember(ctx, \"points\", \"pt:A\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res31) \/\/ >>> true\n\n\tres32, err := rdb.VIsMember(ctx, \"points\", \"pt:W\").Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res32) \/\/ >>> false\n\n\tres33, err := rdb.VSimWithArgsWithAttribs(ctx, \"points\",\n\t\t&redis.VectorRef{Name: \"pt:A\"},\n\t\t&redis.VSimArgs{Count: 1, Truth: true},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res33[0].Name, *res33[0].Attribs) \/\/ >>> pt:A {\"price\":18.99,\"size\":\"large\"}\n\n\tres34, err := rdb.VSimWithArgsWithScoresWithAttribs(ctx, \"points\",\n\t\t&redis.VectorRef{Name: \"pt:A\"},\n\t\t&redis.VSimArgs{Count: 1, Truth: true},\n\t).Result()\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(res34[0].Name, res34[0].Score, *res34[0].Attribs) \/\/ >>> pt:A 1 {\"price\":18.99,\"size\":\"large\"}","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex25","language":"java","code":"CompletableFuture<Void> filteredSimilaritySearch = asyncCommands\n                    .vsetattr(\"points\", \"pt:A\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 18.99}\").thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> true\n                        return asyncCommands.vsetattr(\"points\", \"pt:B\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 35.99}\");\n                    }).thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> true\n                        return asyncCommands.vsetattr(\"points\", \"pt:C\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 25.99}\");\n                    }).thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> true\n                        return asyncCommands.vsetattr(\"points\", \"pt:D\", \"{\\\"size\\\": \\\"small\\\", \\\"price\\\": 21.00}\");\n                    }).thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> true\n                        return asyncCommands.vsetattr(\"points\", \"pt:E\", \"{\\\"size\\\": \\\"small\\\", \\\"price\\\": 17.75}\");\n                    }).thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> true\n\n                        \/\/ Return elements in order of distance from point A whose size attribute is large.\n                        VSimArgs filterArgs = new VSimArgs();\n                        filterArgs.filter(\".size == \\\"large\\\"\");\n                        return asyncCommands.vsim(\"points\", filterArgs, \"pt:A\");\n                    }).thenCompose(result -> {\n                        System.out.println(result); \/\/ >>> [pt:A, pt:C, pt:B]\n\n                        \/\/ Return elements in order of distance from point A whose size is large and price > 20.00.\n                        VSimArgs filterArgs2 = new VSimArgs();\n                        filterArgs2.filter(\".size == \\\"large\\\" && .price > 20.00\");\n                        return asyncCommands.vsim(\"points\", filterArgs2, \"pt:A\");\n                    }).thenAccept(result -> {\n                        System.out.println(result); \/\/ >>> [pt:C, pt:B]\n                    }).toCompletableFuture();","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex26","language":"java","code":"Mono<Void> filteredSimilaritySearch = reactiveCommands\n                    .vsetattr(\"points\", \"pt:A\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 18.99}\").doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).flatMap(result -> reactiveCommands.vsetattr(\"points\", \"pt:B\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 35.99}\"))\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).flatMap(result -> reactiveCommands.vsetattr(\"points\", \"pt:C\", \"{\\\"size\\\": \\\"large\\\", \\\"price\\\": 25.99}\"))\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).flatMap(result -> reactiveCommands.vsetattr(\"points\", \"pt:D\", \"{\\\"size\\\": \\\"small\\\", \\\"price\\\": 21.00}\"))\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).flatMap(result -> reactiveCommands.vsetattr(\"points\", \"pt:E\", \"{\\\"size\\\": \\\"small\\\", \\\"price\\\": 17.75}\"))\n                    .doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> true\n                    }).flatMap(result -> {\n                        \/\/ Return elements in order of distance from point A whose size attribute is large.\n                        VSimArgs filterArgs = new VSimArgs();\n                        filterArgs.filter(\".size == \\\"large\\\"\");\n                        return reactiveCommands.vsim(\"points\", filterArgs, \"pt:A\").collectList();\n                    }).doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [pt:A, pt:C, pt:B]\n                    }).flatMap(result -> {\n                        \/\/ Return elements in order of distance from point A whose size is large and price > 20.00.\n                        VSimArgs filterArgs2 = new VSimArgs();\n                        filterArgs2.filter(\".size == \\\"large\\\" && .price > 20.00\");\n                        return reactiveCommands.vsim(\"points\", filterArgs2, \"pt:A\").collectList();\n                    }).doOnNext(result -> {\n                        System.out.println(result); \/\/ >>> [pt:C, pt:B]\n                    }).then();","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex27","language":"java","code":"boolean res24 = jedis.vsetattr(\"points\", \"pt:A\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":18.99}\");\n      System.out.println(res24); \/\/ >>> true\n\n      boolean res25 = jedis.vsetattr(\"points\", \"pt:B\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":35.99}\");\n      System.out.println(res25); \/\/ >>> true\n\n      boolean res26 = jedis.vsetattr(\"points\", \"pt:C\", \"{\\\"size\\\":\\\"large\\\",\\\"price\\\":25.99}\");\n      System.out.println(res26); \/\/ >>> true\n\n      boolean res27 = jedis.vsetattr(\"points\", \"pt:D\", \"{\\\"size\\\":\\\"small\\\",\\\"price\\\":21.00}\");\n      System.out.println(res27); \/\/ >>> true\n\n      boolean res28 = jedis.vsetattr(\"points\", \"pt:E\", \"{\\\"size\\\":\\\"small\\\",\\\"price\\\":17.75}\");\n      System.out.println(res28); \/\/ >>> true\n\n      List<String> res29 = jedis.vsimByElement(\"points\", \"pt:A\",\n        new VSimParams().filter(\".size == \\\"large\\\"\"));\n      System.out.println(res29); \/\/ >>> [\"pt:A\", \"pt:C\", \"pt:B\"]\n\n      List<String> res30 = jedis.vsimByElement(\"points\", \"pt:A\",\n        new VSimParams().filter(\".size == \\\"large\\\" && .price > 20.00\"));\n      System.out.println(res30); \/\/ >>> [\"pt:C\", \"pt:B\"]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex28","language":"javascript","code":"const res24 = await client.vSetAttr(\"points\", \"pt:A\", {\n  size: \"large\",\n  price: 18.99\n});\nconsole.log(res24);  \/\/ >>> true\n\nconst res25 = await client.vSetAttr(\"points\", \"pt:B\", {\n  size: \"large\",\n  price: 35.99\n});\nconsole.log(res25);  \/\/ >>> true\n\nconst res26 = await client.vSetAttr(\"points\", \"pt:C\", {\n  size: \"large\",\n  price: 25.99\n});\nconsole.log(res26);  \/\/ >>> true\n\nconst res27 = await client.vSetAttr(\"points\", \"pt:D\", {\n  size: \"small\",\n  price: 21.00\n});\nconsole.log(res27);  \/\/ >>> true\n\nconst res28 = await client.vSetAttr(\"points\", \"pt:E\", {\n  size: \"small\",\n  price: 17.75\n});\nconsole.log(res28);  \/\/ >>> true\n\n\/\/ Return elements in order of distance from point A whose\n\/\/ `size` attribute is `large`.\nconst res29 = await client.vSim(\"points\", \"pt:A\", {\n  FILTER: '.size == \"large\"'\n});\nconsole.log(res29);  \/\/ >>> ['pt:A', 'pt:C', 'pt:B']\n\n\/\/ Return elements in order of distance from point A whose size is\n\/\/ `large` and whose price is greater than 20.00.\nconst res30 = await client.vSim(\"points\", \"pt:A\", {\n  FILTER: '.size == \"large\" && .price > 20.00'\n});\nconsole.log(res30);  \/\/ >>> ['pt:C', 'pt:B']","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex29","language":"php","code":"$res24 = $r->vsetattr('points', 'pt:A', [\n            'size' => 'large',\n            'price' => 18.99\n        ]);\n        echo $res24 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res25 = $r->vsetattr('points', 'pt:B', [\n            'size' => 'large',\n            'price' => 35.99\n        ]);\n        echo $res25 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res26 = $r->vsetattr('points', 'pt:C', [\n            'size' => 'large',\n            'price' => 25.99\n        ]);\n        echo $res26 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res27 = $r->vsetattr('points', 'pt:D', [\n            'size' => 'small',\n            'price' => 21.00\n        ]);\n        echo $res27 . PHP_EOL;\n        \/\/ >>> 1\n\n        $res28 = $r->vsetattr('points', 'pt:E', [\n            'size' => 'small',\n            'price' => 17.75\n        ]);\n        echo $res28 . PHP_EOL;\n        \/\/ >>> 1\n\n        \/\/ Return elements in order of distance from point A whose\n        \/\/ `size` attribute is `large`.\n        $res29 = $r->vsim(\n            'points', 'pt:A',true, null, null, null, null,\n            '.size == \"large\"'\n        );\n        echo json_encode($res29) . PHP_EOL;\n        \/\/ >>> [\"pt:A\",\"pt:C\",\"pt:B\"]\n\n        \/\/ Return elements in order of distance from point A whose size is\n        \/\/ `large` and whose price is greater than 20.00.\n        $res30 = $r->vsim(\n            'points', 'pt:A',true, null, null, null, null,\n            '.size == \"large\" && .price > 20.00'\n        );\n        echo json_encode($res30) . PHP_EOL;\n        \/\/ >>> [\"pt:C\",\"pt:B\"]","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex30","language":"python","code":"res24 = r.vset().vsetattr(\"points\", \"pt:A\", {\n    \"size\": \"large\",\n    \"price\": 18.99\n})\nprint(res24)  # >>> 1\n\nres25 = r.vset().vsetattr(\"points\", \"pt:B\", {\n    \"size\": \"large\",\n    \"price\": 35.99\n})\nprint(res25)  # >>> 1\n\nres26 = r.vset().vsetattr(\"points\", \"pt:C\", {\n    \"size\": \"large\",\n    \"price\": 25.99\n})\nprint(res26)  # >>> 1\n\nres27 = r.vset().vsetattr(\"points\", \"pt:D\", {\n    \"size\": \"small\",\n    \"price\": 21.00\n})\nprint(res27)  # >>> 1\n\nres28 = r.vset().vsetattr(\"points\", \"pt:E\", {\n    \"size\": \"small\",\n    \"price\": 17.75\n})\nprint(res28)  # >>> 1\n\n# Return elements in order of distance from point A whose\n# `size` attribute is `large`.\nres29 = r.vset().vsim(\n    \"points\", \"pt:A\",\n    filter='.size == \"large\"'\n)\nprint(res29)  # >>> ['pt:A', 'pt:C', 'pt:B']\n\n# Return elements in order of distance from point A whose size is\n# `large` and whose price is greater than 20.00.\nres30 = r.vset().vsim(\n    \"points\", \"pt:A\",\n    filter='.size == \"large\" && .price > 20.00'\n)\nprint(res30)  # >>> ['pt:C', 'pt:B']","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex31","language":"rust","code":"let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":18.99}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR A should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:B\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":35.99}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR B should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:C\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":25.99}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR C should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:D\")\n            .arg(\"{\\\"size\\\":\\\"small\\\",\\\"price\\\":21.00}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR D should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:E\")\n            .arg(\"{\\\"size\\\":\\\"small\\\",\\\"price\\\":17.75}\")\n            .query_async(&mut r)\n            .await\n            .expect(\"VSETATTR E should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let opts = VSimOptions::default().set_filter_expression(\".size == \\\"large\\\"\");\n        if let Ok(res) = r\n            .vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n            .await\n        {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:A\", \"pt:C\", \"pt:B\"]\n            }\n        }\n\n        let opts = VSimOptions::default()\n            .set_filter_expression(\".size == \\\"large\\\" && .price > 20.00\");\n        if let Ok(res) = r\n            .vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n            .await\n        {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:C\", \"pt:B\"]\n            }\n        }","section_id":"vector-similarity-search"},{"id":"vector-similarity-search-ex32","language":"rust","code":"let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:A\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":18.99}\")\n            .query(&mut r)\n            .expect(\"VSETATTR A should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:B\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":35.99}\")\n            .query(&mut r)\n            .expect(\"VSETATTR B should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:C\")\n            .arg(\"{\\\"size\\\":\\\"large\\\",\\\"price\\\":25.99}\")\n            .query(&mut r)\n            .expect(\"VSETATTR C should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:D\")\n            .arg(\"{\\\"size\\\":\\\"small\\\",\\\"price\\\":21.00}\")\n            .query(&mut r)\n            .expect(\"VSETATTR D should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let res: bool = cmd(\"VSETATTR\")\n            .arg(\"points\")\n            .arg(\"pt:E\")\n            .arg(\"{\\\"size\\\":\\\"small\\\",\\\"price\\\":17.75}\")\n            .query(&mut r)\n            .expect(\"VSETATTR E should succeed\");\n        println!(\"{res}\"); \/\/ >>> true\n\n        let opts = VSimOptions::default().set_filter_expression(\".size == \\\"large\\\"\");\n        if let Ok(res) =\n            r.vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n        {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:A\", \"pt:C\", \"pt:B\"]\n            }\n        }\n\n        let opts = VSimOptions::default()\n            .set_filter_expression(\".size == \\\"large\\\" && .price > 20.00\");\n        if let Ok(res) =\n            r.vsim_options(\"points\", VectorSimilaritySearchInput::Element(\"pt:A\"), &opts)\n        {\n            let res: Value = res;\n            if let Value::Array(items) = res {\n                let view: Vec<String> = items\n                    .into_iter()\n                    .map(|item| match item {\n                        Value::BulkString(bytes) => String::from_utf8(bytes).expect(\"utf8\"),\n                        Value::SimpleString(s) => s,\n                        other => panic!(\"Unexpected VSIM item: {other:?}\"),\n                    })\n                    .collect();\n                println!(\"{view:?}\");\n                \/\/ >>> [\"pt:C\", \"pt:B\"]\n            }\n        }","section_id":"vector-similarity-search"}]}