@@ -22,30 +22,35 @@ graph LR
2222var embedding = await aiModel .GetEmbeddingAsync (" Red running shoes, size 42" );
2323
2424await redis .VectorSetAddAsync (" products" ,
25- VectorSetAddRequest .Create (" shoe-123" , embedding ));
25+ VectorSetAddRequest .Member (" shoe-123" , embedding ));
2626
2727// Add with JSON attributes (metadata)
2828await redis .VectorSetAddAsync (" products" ,
29- VectorSetAddRequest .Create (" shoe-456" , embedding )
30- . WithAttributes ( """ {"category":"shoes","price":79.99,"brand":"Nike"}""" ));
29+ VectorSetAddRequest .Member (" shoe-456" , embedding ,
30+ attributes : """ {"category":"shoes","price":79.99,"brand":"Nike"}""" ));
3131```
3232
3333## Similarity Search
3434
35+ The search returns a ` Lease<T> ` which ** must be disposed** after use to return pooled memory.
36+
3537``` csharp
3638// Find the 5 most similar items to a query vector
3739var queryEmbedding = await aiModel .GetEmbeddingAsync (" comfortable sneakers for running" );
3840
39- var results = await redis .VectorSetSimilaritySearchAsync (" products" ,
40- VectorSetSimilaritySearchRequest .Create (queryEmbedding , count : 5 ) );
41+ using var results = await redis .VectorSetSimilaritySearchAsync (" products" ,
42+ VectorSetSimilaritySearchRequest .ByVector (queryEmbedding ) with { Count = 5 } );
4143
42- foreach ( var result in results )
44+ if ( results is not null )
4345{
44- Console .WriteLine ($" {result .Member }: score={result .Score : F4 }" );
45-
46- // Get attributes for each result
47- var attrs = await redis .VectorSetGetAttributesJsonAsync (" products" , result .Member ! );
48- Console .WriteLine ($" Attributes: {attrs }" );
46+ foreach (var result in results .Span )
47+ {
48+ Console .WriteLine ($" {result .Member }: score={result .Score : F4 }" );
49+
50+ // Get attributes for each result
51+ var attrs = await redis .VectorSetGetAttributesJsonAsync (" products" , result .Member ! );
52+ Console .WriteLine ($" Attributes: {attrs }" );
53+ }
4954}
5055```
5156
@@ -64,9 +69,19 @@ var dims = await redis.VectorSetDimensionAsync("products");
6469// Get a random member
6570var random = await redis .VectorSetRandomMemberAsync (" products" );
6671
72+ // Get multiple random members
73+ var randoms = await redis .VectorSetRandomMembersAsync (" products" , 5 );
74+
6775// Get info about the VectorSet
6876var info = await redis .VectorSetInfoAsync (" products" );
6977
78+ // Get the approximate vector for a member
79+ using var vector = await redis .VectorSetGetApproximateVectorAsync (" products" , " shoe-123" );
80+
81+ // Get HNSW graph neighbors
82+ var links = await redis .VectorSetGetLinksAsync (" products" , " shoe-123" );
83+ var linksWithScores = await redis .VectorSetGetLinksWithScoresAsync (" products" , " shoe-123" );
84+
7085// Remove a member
7186await redis .VectorSetRemoveAsync (" products" , " shoe-123" );
7287```
@@ -91,29 +106,32 @@ foreach (var doc in documents)
91106{
92107 var embedding = await aiModel .GetEmbeddingAsync (doc .Content );
93108 await redis .VectorSetAddAsync (" docs" ,
94- VectorSetAddRequest .Create (doc .Id , embedding )
95- . WithAttributes ( $""" { { " title" : " {doc.Title}" }}""" ));
109+ VectorSetAddRequest .Member (doc .Id , embedding ,
110+ attributes : $""" { { " title" : " {doc.Title}" }}""" ));
96111}
97112
98113// Query: find relevant context for a prompt
99- var queryEmb = await aiModel .GetEmbeddingAsync (userQuestion );
100- var context = await redis .VectorSetSimilaritySearchAsync (" docs" ,
101- VectorSetSimilaritySearchRequest .Create (queryEmb , count : 3 ));
114+ using var context = await redis .VectorSetSimilaritySearchAsync (" docs" ,
115+ VectorSetSimilaritySearchRequest .ByVector (queryEmb ) with { Count = 3 });
102116```
103117
104118### Recommendations
105119``` csharp
106120// Find products similar to what the user just viewed
107- var viewedProduct = await redis .VectorSetGetApproximateVectorAsync (" products" , productId );
108- // Use the vector to find similar items
121+ using var vector = await redis .VectorSetGetApproximateVectorAsync (" products" , viewedProductId );
122+ if (vector is not null )
123+ {
124+ using var similar = await redis .VectorSetSimilaritySearchAsync (" products" ,
125+ VectorSetSimilaritySearchRequest .ByVector (vector .Span .ToArray ()) with { Count = 10 });
126+ }
109127```
110128
111129### Semantic Search
112130``` csharp
113131// Search by meaning, not keywords
114132var searchEmb = await aiModel .GetEmbeddingAsync (" something warm for winter" );
115- var results = await redis .VectorSetSimilaritySearchAsync (" clothing" ,
116- VectorSetSimilaritySearchRequest .Create (searchEmb , count : 20 ) );
133+ using var results = await redis .VectorSetSimilaritySearchAsync (" clothing" ,
134+ VectorSetSimilaritySearchRequest .ByVector (searchEmb ) with { Count = 20 } );
117135```
118136
119137## Performance Notes
@@ -122,3 +140,4 @@ var results = await redis.VectorSetSimilaritySearchAsync("clothing",
122140- Approximate nearest neighbor search — extremely fast even with millions of vectors
123141- Memory efficient compared to external vector databases
124142- Vectors are stored directly in Redis — no external index to maintain
143+ - ` Lease<T> ` return types use pooled memory — always dispose after use
0 commit comments