diff --git a/Examples/AdvancedJsonExamples.md b/Examples/AdvancedJsonExamples.md
new file mode 100644
index 00000000..53ac2f72
--- /dev/null
+++ b/Examples/AdvancedJsonExamples.md
@@ -0,0 +1,410 @@
+# Advanced JSON
+Redis JSON array filtering examples
+## Contents
+1.  [Business Value Statement](#value)
+2.  [Data Set](#dataset)
+3.  [Data Loading](#dataload)
+4.  [Array Filtering Examples](#arrayfiltering)
+    1.  [All Properties of Array](#allprops)
+    2.  [All Properties of a Field](#allfield)
+    3.  [Relational - Equality](#equality)
+    4.  [Relational - Less Than](#lessthan)
+    5.  [Relational - Greater Than or Equal](#greaterthan)
+    6.  [Logical AND](#logicaland)
+    7.  [Logical OR](#logicalor)
+    8.  [Regex - Contains Exact](#regex_exact)
+    9.  [Regex - Contains, Case Insensitive](#regex_contains)
+    10.  [Regex - Begins With](#regex_begins)
+
+## Business Value Statement <a name="value"></a>
+The ability to query within a JSON object unlocks further value to the underlying data.  Redis supports JSONPath array filtering natively.
+## Data Set <a name="dataset"></a>
+```JSON
+{
+    "city": "Boston",
+    "location": "42.361145, -71.057083",
+    "inventory": [
+        {
+            "id": 15970,
+            "gender": "Men",
+            "season":["Fall", "Winter"],
+            "description": "Turtle Check Men Navy Blue Shirt",
+            "price": 34.95
+        },
+        {
+            "id": 59263,
+            "gender": "Women",
+            "season": ["Fall", "Winter", "Spring", "Summer"],
+            "description": "Titan Women Silver Watch",
+            "price": 129.99
+        },
+        {
+            "id": 46885,
+            "gender": "Boys",
+            "season": ["Fall"],
+            "description": "Ben 10 Boys Navy Blue Slippers",
+            "price": 45.99
+        }
+    ]
+}
+```
+## Data Loading <a name="dataload"></a>
+```c#
+IJsonCommands json = db.JSON();
+json.Set("warehouse:1", "$", new {
+    city = "Boston",
+    location = "42.361145, -71.057083",
+    inventory = new[] {
+        new {
+            id = 15970,
+            gender = "Men",
+            season = new[] {"Fall", "Winter"},
+            description = "Turtle Check Men Navy Blue Shirt",
+            price = 34.95
+        },
+        new {
+            id = 59263,
+            gender = "Women",
+            season = new[] {"Fall", "Winter", "Spring", "Summer"},
+            description = "Titan Women Silver Watch",
+            price = 129.99
+        },
+        new {
+            id = 46885,
+            gender = "Boys",
+            season = new[] {"Fall"},
+            description =  "Ben 10 Boys Navy Blue Slippers",
+            price = 45.99
+        }
+    }
+});
+```
+## Array Filtering Examples <a name="arrayfiltering"></a>
+### Syntax
+[JSON.GET](https://redis.io/commands/json.get/)
+
+### All Properties of Array <a name="allprops"></a>
+Fetch all properties of an array.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[*]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        },
+        {
+                "id":59263,
+                "gender":"Women",
+                "season":[
+                        "Fall",
+                        "Winter",
+                        "Spring",
+                        "Summer"
+                ],
+                "description":"Titan Women Silver Watch",
+                "price":129.99
+        },
+        {
+                "id":46885,
+                "gender":"Boys",
+                "season":[
+                        "Fall"
+                ],
+                "description":"Ben 10 Boys Navy Blue Slippers",
+                "price":45.99
+        }
+]
+```
+
+### All Properties of a Field <a name="allfield"></a>
+Fetch all values of a field within an array.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[*].price",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        34.95,
+        129.99,
+        45.99
+]
+```
+
+### Relational - Equality <a name="equality"></a>
+Fetch all items within an array where a text field matches a given value.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.description==\"Turtle Check Men Navy Blue Shirt\")]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        }
+]
+```
+
+### Relational - Less Than <a name="lessthan"></a>
+Fetch all items within an array where a numeric field is less than a given value.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.price<100)]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        },
+        {
+                "id":46885,
+                "gender":"Boys",
+                "season":[
+                        "Fall"
+                ],
+                "description":"Ben 10 Boys Navy Blue Slippers",
+                "price":45.99
+        }
+]
+```
+
+### Relational - Greater Than or Equal <a name="greaterthan"></a>
+Fetch all items within an array where a numeric field is greater than or equal to a given value.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.id>=20000)]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":59263,
+                "gender":"Women",
+                "season":[
+                        "Fall",
+                        "Winter",
+                        "Spring",
+                        "Summer"
+                ],
+                "description":"Titan Women Silver Watch",
+                "price":129.99
+        },
+        {
+                "id":46885,
+                "gender":"Boys",
+                "season":[
+                        "Fall"
+                ],
+                "description":"Ben 10 Boys Navy Blue Slippers",
+                "price":45.99
+        }
+]
+```
+
+### Logical AND <a name="logicaland"></a>
+Fetch all items within an array that meet two relational operations.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.gender==\"Men\"&&@.price>20)]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        }
+]
+```
+
+### Logical OR <a name="logicalor"></a>
+Fetch all items within an array that meet at least one relational operation.  In this case, return only the ids of those items.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.price<100||@.gender==\"Women\")].id",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        15970,
+        59263,
+        46885
+]
+```
+
+### Regex - Contains Exact <a name="regex_exact"></a>
+Fetch all items within an array that match a given regex pattern.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.description =~ \"Blue\")]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        },
+        {
+                "id":46885,
+                "gender":"Boys",
+                "season":[
+                        "Fall"
+                ],
+                "description":"Ben 10 Boys Navy Blue Slippers",
+                "price":45.99
+        }
+]
+```
+
+### Regex - Contains, Case Insensitive <a name="regex_contains"></a>
+Fetch all items within an array where a field contains a term, case insensitive.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.description =~ \"(?i)watch\")]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":59263,
+                "gender":"Women",
+                "season":[
+                        "Fall",
+                        "Winter",
+                        "Spring",
+                        "Summer"
+                ],
+                "description":"Titan Women Silver Watch",
+                "price":129.99
+        }
+]
+```
+
+### Regex - Begins With <a name="regex_begins"></a>
+Fetch all items within an array where a field begins with a given expression.
+#### Command
+```c#
+Console.WriteLine(json.Get(key: "warehouse:1",
+    path: "$.inventory[?(@.description =~ \"^T\")]",
+    indent: "\t",
+    newLine: "\n"
+));
+```
+#### Result
+```json
+[
+        {
+                "id":59263,
+                "gender":"Women",
+                "season":[
+                        "Fall",
+                        "Winter",
+                        "Spring",
+                        "Summer"
+                ],
+                "description":"Titan Women Silver Watch",
+                "price":129.99
+        }
+]
+
+*** Lab 4 - Regex - Begins With ***
+[
+        {
+                "id":15970,
+                "gender":"Men",
+                "season":[
+                        "Fall",
+                        "Winter"
+                ],
+                "description":"Turtle Check Men Navy Blue Shirt",
+                "price":34.95
+        },
+        {
+                "id":59263,
+                "gender":"Women",
+                "season":[
+                        "Fall",
+                        "Winter",
+                        "Spring",
+                        "Summer"
+                ],
+                "description":"Titan Women Silver Watch",
+                "price":129.99
+        }
+]
+```
diff --git a/Examples/AdvancedQueryOperations.md b/Examples/AdvancedQueryOperations.md
new file mode 100644
index 00000000..1ced1dac
--- /dev/null
+++ b/Examples/AdvancedQueryOperations.md
@@ -0,0 +1,364 @@
+# Advanced Querying
+Aggregation and other more complex RediSearch queries
+## Contents
+1.  [Business Value Statement](#value)
+2.  [Modules Needed](#modules)
+3.  [Vector Similarity Search](#vss)
+    1.  [Data Load](#vss_dataload)
+    2.  [Index Creation](#vss_index)
+    3.  [Search](#vss_search)
+4.  [Advanced Search Queries](#adv_search)
+    1.  [Data Set](#advs_dataset)
+    2.  [Data Load](#advs_dataload)
+    3.  [Index Creation](#advs_index)
+    4.  [Search w/JSON Filtering - Example 1](#advs_ex1)
+    5.  [Search w/JSON Filtering - Example 2](#advs_ex2)
+5.  [Aggregation](#aggr)
+    1.  [Data Set](#aggr_dataset)
+    2.  [Data Load](#aggr_dataload)
+    3.  [Index Creation](#aggr_index)
+    4.  [Aggregation - Count](#aggr_count)
+    5.  [Aggregation - Sum](#aggr_sum)
+
+## Business Value Statement <a name="value"></a>
+Redis provides the following additional advanced search capabilities to derive further value of Redis-held data:
+* Vector Similarity Search - Store and search by ML-generated encodings of text and images
+* Search + JSON Filtering - Combine the power of search with JSONPath filtering of search results
+* Aggregation - Create processing pipelines of search results to extract analytic insights.
+
+## Modules Needed <a name="modules"></a>
+```c#
+using StackExchange.Redis;
+using NRedisStack;
+using NRedisStack.RedisStackCommands;
+using NRedisStack.Search;
+using NRedisStack.Search.Literals.Enums;
+using NRedisStack.Search.Aggregation;
+```
+## Vector Similarity Search (VSS) <a name="vss"></a>
+### Syntax
+[VSS](https://redis.io/docs/stack/search/reference/vectors/)
+
+### Data Load <a name="vss_dataload"></a>
+```c#
+db.HashSet("vec:1", "vector", (new float[] { 1f, 1f, 1f, 1f }).SelectMany(BitConverter.GetBytes).ToArray());
+db.HashSet("vec:2", "vector", (new float[] { 2f, 2f, 2f, 2f }).SelectMany(BitConverter.GetBytes).ToArray());
+db.HashSet("vec:3", "vector", (new float[] { 3f, 3f, 3f, 3f }).SelectMany(BitConverter.GetBytes).ToArray());
+db.HashSet("vec:5", "vector", (new float[] { 4f, 4f, 4f, 4f }).SelectMany(BitConverter.GetBytes).ToArray());
+```
+### Index Creation <a name="vss_index">
+#### Command
+```c#
+ISearchCommands ft = db.FT();
+try {ft.DropIndex("vss_idx");} catch {};
+Console.WriteLine(ft.Create("vss_idx", new FTCreateParams().On(IndexDataType.HASH).Prefix("vec:"),
+    new Schema()
+    .AddVectorField("vector", VectorField.VectorAlgo.FLAT,
+        new Dictionary<string, object>()
+        {
+            ["TYPE"] = "FLOAT32",
+            ["DIM"] = "4",
+            ["DISTANCE_METRIC"] = "L2"
+        }
+)));
+```
+#### Result
+```bash
+True
+```
+
+### Search <a name="vss_search">
+#### Command
+```c#
+float[] vec = new[] { 2f, 2f, 3f, 3f};
+var res = ft.Search("vss_idx",
+            new Query("*=>[KNN 2 @vector $query_vec]")
+            .AddParam("query_vec", vec.SelectMany(BitConverter.GetBytes).ToArray())
+            .SetSortBy("__vector_score")
+            .Dialect(2));
+foreach (var doc in res.Documents) {
+    foreach (var item in doc.GetProperties()) {
+        if (item.Key == "__vector_score") {
+            Console.WriteLine($"id: {doc.Id}, score: {item.Value}");
+        }
+    }
+}
+```
+#### Result
+```bash
+id: vec:2, score: 2
+id: vec:3, score: 2
+```
+
+## Advanced Search Queries <a name="adv_search">
+### Data Set <a name="advs_dataset">
+```json
+{
+    "city": "Boston",
+    "location": "42.361145, -71.057083",
+    "inventory": [
+        {
+            "id": 15970,
+            "gender": "Men",
+            "season":["Fall", "Winter"],
+            "description": "Turtle Check Men Navy Blue Shirt",
+            "price": 34.95
+        },
+        {
+            "id": 59263,
+            "gender": "Women",
+            "season": ["Fall", "Winter", "Spring", "Summer"],
+            "description": "Titan Women Silver Watch",
+            "price": 129.99
+        },
+        {
+            "id": 46885,
+            "gender": "Boys",
+            "season": ["Fall"],
+            "description": "Ben 10 Boys Navy Blue Slippers",
+            "price": 45.99
+        }
+    ]
+},
+{
+    "city": "Dallas",
+    "location": "32.779167, -96.808891",
+    "inventory": [
+        {
+            "id": 51919,
+            "gender": "Women",
+            "season":["Summer"],
+            "description": "Nyk Black Horado Handbag",
+            "price": 52.49
+        },
+        {
+            "id": 4602,
+            "gender": "Unisex",
+            "season": ["Fall", "Winter"],
+            "description": "Wildcraft Red Trailblazer Backpack",
+            "price": 50.99
+        },
+        {
+            "id": 37561,
+            "gender": "Girls",
+            "season": ["Spring", "Summer"],
+            "description": "Madagascar3 Infant Pink Snapsuit Romper",
+            "price": 23.95
+        }
+    ]
+}
+```
+
+### Data Load  <a name="advs_dataload">
+```c#
+IJsonCommands json = db.JSON();
+json.Set("warehouse:1", "$", new {
+    city = "Boston",
+    location = "-71.057083, 42.361145",
+    inventory = new[] {
+        new {
+            id = 15970,
+            gender = "Men",
+            season = new[] {"Fall", "Winter"},
+            description = "Turtle Check Men Navy Blue Shirt",
+            price = 34.95
+        },
+        new {
+            id = 59263,
+            gender = "Women",
+            season = new[] {"Fall", "Winter", "Spring", "Summer"},
+            description = "Titan Women Silver Watch",
+            price = 129.99
+        },
+        new {
+            id = 46885,
+            gender = "Boys",
+            season = new[] {"Fall"},
+            description = "Ben 10 Boys Navy Blue Slippers",
+            price = 45.99
+        }
+    }
+});
+json.Set("warehouse:2", "$", new {
+    city = "Dallas",
+    location = "-96.808891, 32.779167",
+    inventory = new[] {
+        new {
+            id = 51919,
+            gender = "Women",
+            season = new[] {"Summer"},
+            description = "Nyk Black Horado Handbag",
+            price = 52.49
+        },
+        new {
+            id = 4602,
+            gender = "Unisex",
+            season = new[] {"Fall", "Winter"},
+            description = "Wildcraft Red Trailblazer Backpack",
+            price = 50.99
+        },
+        new {
+            id = 37561,
+            gender = "Girls",
+            season = new[] {"Spring", "Summer"},
+            description = "Madagascar3 Infant Pink Snapsuit Romper",
+            price = 23.95
+        }
+    }
+});
+```
+
+### Index Creation <a name="advs_index">
+#### Command
+```c#
+ISearchCommands ft = db.FT();
+try {ft.DropIndex("wh_idx");} catch {};
+Console.WriteLine(ft.Create("wh_idx", new FTCreateParams()
+                        .On(IndexDataType.JSON)
+                        .Prefix("warehouse:"),
+                        new Schema().AddTextField(new FieldName("$.city", "city"))));
+```
+#### Result
+```bash
+True
+```
+
+### Search w/JSON Filtering - Example 1 <a name="advs_ex1">
+Find all inventory ids from all the Boston warehouse that have a price > $50.
+#### Command
+```c#
+foreach (var doc in ft.Search("wh_idx",
+                        new Query("@city:Boston")
+                            .ReturnFields(new FieldName("$.inventory[?(@.price>50)].id", "result"))
+                            .Dialect(3))
+                    .Documents.Select(x => x["result"]))
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+[59263]
+```
+
+### Search w/JSON Filtering - Example 2 <a name="advs_ex2">
+Find all inventory items in Dallas that are for Women or Girls
+#### Command
+```c#
+foreach (var doc in ft.Search("wh_idx",
+                        new Query("@city:(Dallas)")
+                            .ReturnFields(new FieldName("$.inventory[?(@.gender==\"Women\" || @.gender==\"Girls\")]", "result"))
+                            .Dialect(3))
+                    .Documents.Select(x => x["result"]))
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+[{"id":51919,"gender":"Women","season":["Summer"],"description":"Nyk Black Horado Handbag","price":52.49},{"id":37561,"gender":"Girls","season":["Spring","Summer"],"description":"Madagascar3 Infant Pink Snapsuit Romper","price":23.95}]
+```
+
+## Aggregation <a name="aggr">
+### Syntax
+[FT.AGGREGATE](https://redis.io/commands/ft.aggregate/)
+
+### Data Set <a name="aggr_dataset">
+```JSON
+{
+    "title": "System Design Interview",
+    "year": 2020,
+    "price": 35.99
+},
+{
+    "title": "The Age of AI: And Our Human Future",
+    "year": 2021,
+    "price": 13.99
+},
+{
+    "title": "The Art of Doing Science and Engineering: Learning to Learn",
+    "year": 2020,
+    "price": 20.99
+},
+{
+    "title": "Superintelligence: Path, Dangers, Stategies",
+    "year": 2016,
+    "price": 14.36
+}
+```
+### Data Load <a name="aggr_dataload">
+```c#
+json.Set("book:1", "$", new {
+    title = "System Design Interview",
+    year = 2020,
+    price = 35.99
+});
+json.Set("book:2", "$", new {
+    title =  "The Age of AI: And Our Human Future",
+    year = 2021,
+    price = 13.99
+});
+json.Set("book:3", "$", new {
+    title = "The Art of Doing Science and Engineering: Learning to Learn",
+    year = 2020,
+    price = 20.99
+});
+json.Set("book:4", "$", new {
+    title = "Superintelligence: Path, Dangers, Stategies",
+    year = 2016,
+    price = 14.36
+});
+```
+
+### Index Creation <a name="aggr_index">
+#### Command
+```c#
+Console.WriteLine(ft.Create("book_idx", new FTCreateParams()
+                        .On(IndexDataType.JSON)
+                        .Prefix("book:"),
+                        new Schema().AddTextField(new FieldName("$.title", "title"))
+                            .AddNumericField(new FieldName("$.year", "year"))
+                            .AddNumericField(new FieldName("$.price", "price"))));
+```
+#### Result
+```bash
+True
+```
+
+### Aggregation - Count <a name="aggr_count">
+Find the total number of books per year
+#### Command
+```c#
+var request = new AggregationRequest("*").GroupBy("@year", Reducers.Count().As("count"));
+var result = ft.Aggregate("book_idx", request);
+for (var i=0; i<result.TotalResults; i++)
+{
+    var row = result.GetRow(i);
+    Console.WriteLine($"{row["year"]}: {row["count"]}");
+}
+```
+#### Result
+```bash
+2021: 1
+2020: 2
+2016: 1
+```
+
+### Aggregation - Sum <a name="aggr_sum">
+Sum of inventory dollar value by year
+#### Command
+```c#
+request = new AggregationRequest("*").GroupBy("@year", Reducers.Sum("@price").As("sum"));
+result = ft.Aggregate("book_idx", request);
+for (var i=0; i<result.TotalResults; i++)
+{
+    var row = result.GetRow(i);
+    Console.WriteLine($"{row["year"]}: {row["sum"]}");
+}
+```
+#### Result
+```bash
+2021: 13.99
+2020: 56.98
+2016: 14.36
+```
\ No newline at end of file
diff --git a/Examples/BasicJsonExamples.md b/Examples/BasicJsonExamples.md
index 6e662e15..f64d924a 100644
--- a/Examples/BasicJsonExamples.md
+++ b/Examples/BasicJsonExamples.md
@@ -1,6 +1,5 @@
 # Basic JSON Operations
 Create, read, update, delete (CRUD) operations with the Redis JSON data type
-
 ## Contents
 1.  [Business Value Statement](#value)
 2.  [Create](#create)
@@ -47,6 +46,7 @@ Console.WriteLine(json.Set("ex1:1", "$", "\"val\""));
 True
 ```
 
+
 ### Single string property <a name="single_string"></a>
 Insert a single-property JSON object.
 #### Command
diff --git a/Examples/BasicQueryOperations.md b/Examples/BasicQueryOperations.md
new file mode 100644
index 00000000..dac955e6
--- /dev/null
+++ b/Examples/BasicQueryOperations.md
@@ -0,0 +1,305 @@
+# Basic Query Operations
+Examples of simple query operations with RediSearch
+## Contents
+1.  [Business Value Statement](#value)
+2.  [Modules Needed](#modules)
+3.  [Data Set](#dataset)
+4.  [Data Loading](#loading)
+5.  [Index Creation](#index_creation)
+6.  [Search Examples](#search_examples)
+    1.  [Retrieve All](#retrieve_all)
+    2.  [Single Term Text](#single_term)
+    3.  [Exact Phrase Text](#exact_phrase)
+    4.  [Numeric Range](#numeric_range)
+    5.  [Tag Array](#tag_array)
+    6.  [Logical AND](#logical_and)
+    7.  [Logical OR](#logical_or)
+    8.  [Negation](#negation)
+    9.  [Prefix](#prefix)
+    10.  [Suffix](#suffix)
+    11.  [Fuzzy](#fuzzy)
+    12.  [Geo](#geo)
+
+## Business Value Statement <a name="value"></a>
+Search is an essential function to derive the value of data.  Redis provides inherent, high-speed search capabilities for JSON and Hash Set data.
+## Modules Needed <a name="modules"></a>
+```c#
+using StackExchange.Redis;
+using NRedisStack;
+using NRedisStack.RedisStackCommands;
+using NRedisStack.Search;
+using NRedisStack.Search.Literals.Enums;
+```
+
+## Data Set <a name="dataset"></a>
+```JSON
+[
+    {
+        "id": 15970,
+        "gender": "Men",
+        "season":["Fall", "Winter"],
+        "description": "Turtle Check Men Navy Blue Shirt",
+        "price": 34.95,
+        "city": "Boston",
+        "location": "42.361145, -71.057083"
+    },
+    {
+        "id": 59263,
+        "gender": "Women",
+        "season": ["Fall", "Winter", "Spring", "Summer"],
+        "description": "Titan Women Silver Watch",
+        "price": 129.99,
+        "city": "Dallas",
+        "location": "32.779167, -96.808891"
+    },
+    {
+        "id": 46885,
+        "gender": "Boys",
+        "season": ["Fall"],
+        "description": "Ben 10 Boys Navy Blue Slippers",
+        "price": 45.99,
+        "city": "Denver",
+        "location": "39.742043, -104.991531"
+    }
+]
+```
+## Data Loading <a name="loading"></a>
+```c#
+IJsonCommands json = db.JSON();
+json.Set("product:15970", "$", new {
+    id = 15970,
+    gender = "Men",
+    season = new[] {"Fall", "Winter"},
+    description = "Turtle Check Men Navy Blue Shirt",
+    price = 34.95,
+    city = "Boston",
+    coords = "-71.057083, 42.361145"
+});
+json.Set("product:59263", "$", new {
+    id = 59263,
+    gender = "Women",
+    season = new[] {"Fall", "Winter", "Spring", "Summer"},
+    description = "Titan Women Silver Watch",
+    price = 129.99,
+    city = "Dallas",
+    coords = "-96.808891, 32.779167"
+});
+json.Set("product:46885", "$", new {
+    id = 46885,
+    gender = "Boys",
+    season = new[] {"Fall"},
+    description = "Ben 10 Boys Navy Blue Slippers",
+    price = 45.99,
+    city = "Denver",
+    coords = "-104.991531, 39.742043"
+});
+```
+## Index Creation <a name="index_creation"></a>
+### Syntax
+[FT.CREATE](https://redis.io/commands/ft.create/)
+
+#### Command
+```c#
+ISearchCommands ft = db.FT();
+try {ft.DropIndex("idx1");} catch {};
+ft.Create("idx1",   new FTCreateParams().On(IndexDataType.JSON)
+                                        .Prefix("product:"),
+                                new Schema().AddNumericField(new FieldName("$.id", "id"))
+                                            .AddTagField(new FieldName("$.gender", "gender"))
+                                            .AddTagField(new FieldName("$.season.*", "season"))
+                                            .AddTextField(new FieldName("$.description", "description"))
+                                            .AddNumericField(new FieldName("$.price", "price"))
+                                            .AddTextField(new FieldName("$.city", "city"))
+                                            .AddGeoField(new FieldName("$.coords", "coords")));
+```
+
+## Search Examples <a name="search_examples"></a>
+### Syntax
+[FT.SEARCH](https://redis.io/commands/ft.search/)
+
+### Retrieve All <a name="retrieve_all"></a>
+Find all documents for a given index.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("*")).ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":15970,"gender":"Men","season":["Fall","Winter"],"description":"Turtle Check Men Navy Blue Shirt","price":34.95,"city":"Boston","coords":"-71.057083, 42.361145"}
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Single Term Text <a name="single_term"></a>
+Find all documents with a given word in a text field.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@description:Slippers"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+```
+
+### Exact Phrase Text <a name="exact_phrase"></a>
+Find all documents with a given phrase in a text field.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@description:(\"Blue Shirt\")"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":15970,"gender":"Men","season":["Fall","Winter"],"description":"Turtle Check Men Navy Blue Shirt","price":34.95,"city":"Boston","coords":"-71.057083, 42.361145"}
+```
+
+### Numeric Range <a name="numeric_range"></a>
+Find all documents with a numeric field in a given range.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@price:[40,130]"))
+                .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Tag Array <a name="tag_array"></a>
+Find all documents that contain a given value in an array field (tag).
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@season:{Spring}"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Logical AND <a name="logical_and"></a>
+Find all documents contain both a numeric field in a range and a word in a text field.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@price:[40, 100] @description:Blue"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+```
+
+### Logical OR <a name="logical_or"></a>
+Find all documents that either match tag value or text value.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("(@gender:{Women})|(@city:Boston)"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":15970,"gender":"Men","season":["Fall","Winter"],"description":"Turtle Check Men Navy Blue Shirt","price":34.95,"city":"Boston","coords":"-71.057083, 42.361145"}
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Negation <a name="negation"></a>
+Find all documents that do not contain a given word in a text field.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("-(@description:Shirt)"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Prefix <a name="prefix"></a>
+Find all documents that have a word that begins with a given prefix value.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@description:Nav*"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":15970,"gender":"Men","season":["Fall","Winter"],"description":"Turtle Check Men Navy Blue Shirt","price":34.95,"city":"Boston","coords":"-71.057083, 42.361145"}
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+```
+
+### Suffix <a name="suffix"></a>
+Find all documents that contain a word that ends with a given suffix value.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@description:*Watch"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":59263,"gender":"Women","season":["Fall","Winter","Spring","Summer"],"description":"Titan Women Silver Watch","price":129.99,"city":"Dallas","coords":"-96.808891, 32.779167"}
+```
+
+### Fuzzy <a name="fuzzy"></a>
+Find all documents that contain a word that is within 1 Levenshtein distance of a given word.
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@description:%wavy%"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":15970,"gender":"Men","season":["Fall","Winter"],"description":"Turtle Check Men Navy Blue Shirt","price":34.95,"city":"Boston","coords":"-71.057083, 42.361145"}
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+```
+
+### Geo <a name="geo"></a>
+Find all documents that have geographic coordinates within a given range of a given coordinate.
+Colorado Springs coords (long, lat) = -104.800644, 38.846127
+#### Command
+```c#
+foreach (var doc in ft.Search("idx1", new Query("@coords:[-104.800644 38.846127 100 mi]"))
+                    .ToJson())
+{
+    Console.WriteLine(doc);
+}
+```
+#### Result
+```json
+{"id":46885,"gender":"Boys","season":["Fall"],"description":"Ben 10 Boys Navy Blue Slippers","price":45.99,"city":"Denver","coords":"-104.991531, 39.742043"}
+```
\ No newline at end of file
diff --git a/src/NRedisStack/Search/SearchResult.cs b/src/NRedisStack/Search/SearchResult.cs
index 7f4c5c77..d111f6eb 100644
--- a/src/NRedisStack/Search/SearchResult.cs
+++ b/src/NRedisStack/Search/SearchResult.cs
@@ -15,7 +15,7 @@ public class SearchResult
         /// <summary>
         /// Converts the documents to a list of json strings. only works on a json documents index.
         /// </summary>
-        public List<string>? ToJson() => Documents.Select(x => x["json"].ToString())
+        public List<string> ToJson() => Documents.Select(x => x["json"].ToString())
                                                          .Where(x => !string.IsNullOrEmpty(x)).ToList();
 
         internal SearchResult(RedisResult[] resp, bool hasContent, bool hasScores, bool hasPayloads/*, bool shouldExplainScore*/)
diff --git a/tests/NRedisStack.Tests/Examples/ExamplesTests.cs b/tests/NRedisStack.Tests/Examples/ExamplesTests.cs
index 6394e704..ddf7f7fd 100644
--- a/tests/NRedisStack.Tests/Examples/ExamplesTests.cs
+++ b/tests/NRedisStack.Tests/Examples/ExamplesTests.cs
@@ -1,10 +1,13 @@
+using System.Text;
 using Moq;
 using NRedisStack.DataTypes;
 using NRedisStack.RedisStackCommands;
 using NRedisStack.Search;
+using NRedisStack.Search.Aggregation;
 using NRedisStack.Search.Literals.Enums;
 using StackExchange.Redis;
 using Xunit;
+using static NRedisStack.Search.Schema;
 
 namespace NRedisStack.Tests;
 
@@ -159,7 +162,7 @@ public async Task JsonWithSearchPipeline()
 
         Assert.True(create.Result);
         Assert.Equal(5, count);
-        //Assert.Equal("person:01", firstPerson?.Id);
+        // Assert.Equal("person:01", firstPerson?.Id);
     }
 
     [Fact]
@@ -367,8 +370,10 @@ public void BasicJsonExamplesTest()
             field1 = "val1",
             field2 = "val2"
         });
+
         // sleep
-        Thread.Sleep(500);
+        Thread.Sleep(2000);
+
         res = json.Get(key: "ex2:3",
             paths: new[] { "$.field1", "$.field2" },
             indent: "\t",
@@ -534,4 +539,522 @@ public void BasicJsonExamplesTest()
         );
         Assert.Equal("{\n\t\"arr1\":[\n\t\t\"val2\",\n\t\t\"val3\"\n\t]\n}", res.ToString());
     }
+
+    [Fact]
+    public void AdvancedJsonExamplesTest()
+    {
+        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
+        IDatabase db = redis.GetDatabase();
+        db.Execute("FLUSHALL");
+        IJsonCommands json = db.JSON();
+
+        json.Set("warehouse:1", "$", new
+        {
+            city = "Boston",
+            location = "42.361145, -71.057083",
+            inventory = new[] {
+                    new {
+                        id = 15970,
+                        gender = "Men",
+                        season = new[] {"Fall", "Winter"},
+                        description = "Turtle Check Men Navy Blue Shirt",
+                        price = 34.95
+                    },
+                    new {
+                        id = 59263,
+                        gender = "Women",
+                        season = new[] {"Fall", "Winter", "Spring", "Summer"},
+                        description = "Titan Women Silver Watch",
+                        price = 129.99
+                    },
+                    new {
+                        id = 46885,
+                        gender = "Boys",
+                        season = new[] {"Fall"},
+                        description =  "Ben 10 Boys Navy Blue Slippers",
+                        price = 45.99
+                    }
+                }
+        });
+
+        // Fetch all properties of an array:
+        var res = json.Get(key: "warehouse:1",
+                path: "$.inventory[*]",
+                indent: "\t",
+                newLine: "\n"
+            );
+        var expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t},\n\t{\n\t\t\"id\":59263,\n\t\t\"gender\":\"Women\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\",\n\t\t\t\"Spring\",\n\t\t\t\"Summer\"\n\t\t],\n\t\t\"description\":\"Titan Women Silver Watch\",\n\t\t\"price\":129.99\n\t},\n\t{\n\t\t\"id\":46885,\n\t\t\"gender\":\"Boys\",\n\t\t\"season\":[\n\t\t\t\"Fall\"\n\t\t],\n\t\t\"description\":\"Ben 10 Boys Navy Blue Slippers\",\n\t\t\"price\":45.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString()); // TODO: fine nicer way to compare the two JSON strings
+
+
+        // Fetch all values of a field within an array:
+        res = json.Get(
+                    key: "warehouse:1",
+                    path: "$.inventory[*].price",
+                    indent: "\t",
+                    newLine: "\n"
+        );
+        expected = "[\n\t34.95,\n\t129.99,\n\t45.99\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a text field matches a given value:
+        res = json.Get(
+                    key: "warehouse:1",
+                    path: "$.inventory[?(@.description==\"Turtle Check Men Navy Blue Shirt\")]",
+                    indent: "\t",
+                    newLine: "\n"
+        );
+
+        expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a numeric field is less than a given value:
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.price<100)]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t},\n\t{\n\t\t\"id\":46885,\n\t\t\"gender\":\"Boys\",\n\t\t\"season\":[\n\t\t\t\"Fall\"\n\t\t],\n\t\t\"description\":\"Ben 10 Boys Navy Blue Slippers\",\n\t\t\"price\":45.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a numeric field is less than a given value:
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.id>=20000)]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":59263,\n\t\t\"gender\":\"Women\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\",\n\t\t\t\"Spring\",\n\t\t\t\"Summer\"\n\t\t],\n\t\t\"description\":\"Titan Women Silver Watch\",\n\t\t\"price\":129.99\n\t},\n\t{\n\t\t\"id\":46885,\n\t\t\"gender\":\"Boys\",\n\t\t\"season\":[\n\t\t\t\"Fall\"\n\t\t],\n\t\t\"description\":\"Ben 10 Boys Navy Blue Slippers\",\n\t\t\"price\":45.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a numeric field is less than a given value:
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.gender==\"Men\"&&@.price>20)]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array that meet at least one relational operation.
+        // In this case, return only the ids of those items:
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.price<100||@.gender==\"Women\")].id",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t15970,\n\t59263,\n\t46885\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array that match a given regex pattern.
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.description =~ \"Blue\")]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t},\n\t{\n\t\t\"id\":46885,\n\t\t\"gender\":\"Boys\",\n\t\t\"season\":[\n\t\t\t\"Fall\"\n\t\t],\n\t\t\"description\":\"Ben 10 Boys Navy Blue Slippers\",\n\t\t\"price\":45.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a field contains a term, case insensitive
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.description =~ \"(?i)watch\")]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":59263,\n\t\t\"gender\":\"Women\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\",\n\t\t\t\"Spring\",\n\t\t\t\"Summer\"\n\t\t],\n\t\t\"description\":\"Titan Women Silver Watch\",\n\t\t\"price\":129.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+
+        // Fetch all items within an array where a field begins with a given expression
+        res = json.Get(key: "warehouse:1",
+                    path: "$.inventory[?(@.description =~ \"^T\")]",
+                    indent: "\t",
+                    newLine: "\n"
+                );
+        expected = "[\n\t{\n\t\t\"id\":15970,\n\t\t\"gender\":\"Men\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\"\n\t\t],\n\t\t\"description\":\"Turtle Check Men Navy Blue Shirt\",\n\t\t\"price\":34.95\n\t},\n\t{\n\t\t\"id\":59263,\n\t\t\"gender\":\"Women\",\n\t\t\"season\":[\n\t\t\t\"Fall\",\n\t\t\t\"Winter\",\n\t\t\t\"Spring\",\n\t\t\t\"Summer\"\n\t\t],\n\t\t\"description\":\"Titan Women Silver Watch\",\n\t\t\"price\":129.99\n\t}\n]";
+        Assert.Equal(expected, res.ToString());
+    }
+
+    [Fact]
+    public void BasicQueryOperationsTest()
+    {
+        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
+        IDatabase db = redis.GetDatabase();
+        db.Execute("FLUSHALL");
+        IJsonCommands json = db.JSON();
+        ISearchCommands ft = db.FT();
+
+        json.Set("product:15970", "$", new
+        {
+            id = 15970,
+            gender = "Men",
+            season = new[] { "Fall", "Winter" },
+            description = "Turtle Check Men Navy Blue Shirt",
+            price = 34.95,
+            city = "Boston",
+            coords = "-71.057083, 42.361145"
+        });
+        json.Set("product:59263", "$", new
+        {
+            id = 59263,
+            gender = "Women",
+            season = new[] { "Fall", "Winter", "Spring", "Summer" },
+            description = "Titan Women Silver Watch",
+            price = 129.99,
+            city = "Dallas",
+            coords = "-96.808891, 32.779167"
+        });
+        json.Set("product:46885", "$", new
+        {
+            id = 46885,
+            gender = "Boys",
+            season = new[] { "Fall" },
+            description = "Ben 10 Boys Navy Blue Slippers",
+            price = 45.99,
+            city = "Denver",
+            coords = "-104.991531, 39.742043"
+        });
+
+        try { ft.DropIndex("idx1"); } catch { };
+        ft.Create("idx1", new FTCreateParams().On(IndexDataType.JSON)
+                                              .Prefix("product:"),
+                                        new Schema().AddNumericField(new FieldName("$.id", "id"))
+                                                    .AddTagField(new FieldName("$.gender", "gender"))
+                                                    .AddTagField(new FieldName("$.season.*", "season"))
+                                                    .AddTextField(new FieldName("$.description", "description"))
+                                                    .AddNumericField(new FieldName("$.price", "price"))
+                                                    .AddTextField(new FieldName("$.city", "city"))
+                                                    .AddGeoField(new FieldName("$.coords", "coords")));
+
+        // sleep:
+        Thread.Sleep(2000);
+
+        // Find all documents for a given index:
+        var res = ft.Search("idx1", new Query("*")).ToJson();
+
+        Assert.NotNull(res);
+        // Assert.Equal(3, res!.Count);
+        var expectedList = new List<string>()
+        {
+            "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}",
+            "{\"id\":15970,\"gender\":\"Men\",\"season\":[\"Fall\",\"Winter\"],\"description\":\"Turtle Check Men Navy Blue Shirt\",\"price\":34.95,\"city\":\"Boston\",\"coords\":\"-71.057083, 42.361145\"}",
+            "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}"
+        };
+
+        SortAndCompare(expectedList, res);
+
+
+
+        // Find all documents with a given word in a text field:
+        res = ft.Search("idx1", new Query("@description:Slippers")).ToJson();
+        var expected = "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}";
+        Assert.Equal(expected, res![0].ToString());
+
+
+        // Find all documents with a given phrase in a text field:
+        res = ft.Search("idx1", new Query("@description:(\"Blue Shirt\")")).ToJson();
+        expected = "{\"id\":15970,\"gender\":\"Men\",\"season\":[\"Fall\",\"Winter\"],\"description\":\"Turtle Check Men Navy Blue Shirt\",\"price\":34.95,\"city\":\"Boston\",\"coords\":\"-71.057083, 42.361145\"}";
+        Assert.Equal(expected, res![0].ToString());
+
+        // Find all documents with a numeric field in a given range:
+        res = ft.Search("idx1", new Query("@price:[40,130]")).ToJson();
+
+        expectedList = new()
+        {
+            "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}",
+            "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}"
+        };
+
+        SortAndCompare(expectedList, res);
+
+
+
+        // Find all documents that contain a given value in an array field (tag):
+        res = ft.Search("idx1", new Query("@season:{Spring}")).ToJson();
+        expected = "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}";
+        Assert.Equal(expected, res[0].ToString());
+
+        // Find all documents contain both a numeric field in a range and a word in a text field:
+        res = ft.Search("idx1", new Query("@price:[40, 100] @description:Blue")).ToJson();
+        expected = "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}";
+        Assert.Equal(expected, res[0].ToString());
+
+        // Find all documents that either match tag value or text value:
+        res = ft.Search("idx1", new Query("(@gender:{Women})|(@city:Boston)")).ToJson();
+        expectedList = new()
+        {
+            "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}",
+            "{\"id\":15970,\"gender\":\"Men\",\"season\":[\"Fall\",\"Winter\"],\"description\":\"Turtle Check Men Navy Blue Shirt\",\"price\":34.95,\"city\":\"Boston\",\"coords\":\"-71.057083, 42.361145\"}"
+        };
+
+        SortAndCompare(expectedList, res);
+
+        // Find all documents that do not contain a given word in a text field:
+        res = ft.Search("idx1", new Query("-(@description:Shirt)")).ToJson();
+
+        expectedList = new()
+        {
+            "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}",
+            "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}"
+        };
+        SortAndCompare(expectedList, res);
+
+        // Find all documents that have a word that begins with a given prefix value:
+        res = ft.Search("idx1", new Query("@description:Nav*")).ToJson();
+
+        expectedList = new()
+        {
+            "{\"id\":15970,\"gender\":\"Men\",\"season\":[\"Fall\",\"Winter\"],\"description\":\"Turtle Check Men Navy Blue Shirt\",\"price\":34.95,\"city\":\"Boston\",\"coords\":\"-71.057083, 42.361145\"}",
+            "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}"
+        };
+        SortAndCompare(expectedList, res);
+
+        // Find all documents that contain a word that ends with a given suffix value:
+        res = ft.Search("idx1", new Query("@description:*Watch")).ToJson();
+
+        expected = "{\"id\":59263,\"gender\":\"Women\",\"season\":[\"Fall\",\"Winter\",\"Spring\",\"Summer\"],\"description\":\"Titan Women Silver Watch\",\"price\":129.99,\"city\":\"Dallas\",\"coords\":\"-96.808891, 32.779167\"}";
+        Assert.Equal(expected, res[0].ToString());
+
+        // Find all documents that contain a word that is within 1 Levenshtein distance of a given word:
+        res = ft.Search("idx1", new Query("@description:%wavy%")).ToJson();
+
+
+        expectedList = new()
+        {
+            "{\"id\":15970,\"gender\":\"Men\",\"season\":[\"Fall\",\"Winter\"],\"description\":\"Turtle Check Men Navy Blue Shirt\",\"price\":34.95,\"city\":\"Boston\",\"coords\":\"-71.057083, 42.361145\"}",
+            "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}"
+        };
+        SortAndCompare(expectedList, res);
+
+        // Find all documents that have geographic coordinates within a given range of a given coordinate.
+        // Colorado Springs coords(long, lat) = -104.800644, 38.846127:
+        res = ft.Search("idx1", new Query("@coords:[-104.800644 38.846127 100 mi]")).ToJson();
+
+        expected = "{\"id\":46885,\"gender\":\"Boys\",\"season\":[\"Fall\"],\"description\":\"Ben 10 Boys Navy Blue Slippers\",\"price\":45.99,\"city\":\"Denver\",\"coords\":\"-104.991531, 39.742043\"}";
+        Assert.Equal(expected, res[0].ToString());
+    }
+
+    [Fact]
+    public void AdvancedQueryOperationsTest()
+    {
+        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
+        IDatabase db = redis.GetDatabase();
+        db.Execute("FLUSHALL");
+        IJsonCommands json = db.JSON();
+        ISearchCommands ft = db.FT();
+
+        // Vector Similarity Search (VSS)
+        // Data load:
+        db.HashSet("vec:1", "vector", (new float[] { 1f, 1f, 1f, 1f }).SelectMany(BitConverter.GetBytes).ToArray());
+        db.HashSet("vec:2", "vector", (new float[] { 2f, 2f, 2f, 2f }).SelectMany(BitConverter.GetBytes).ToArray());
+        db.HashSet("vec:3", "vector", (new float[] { 3f, 3f, 3f, 3f }).SelectMany(BitConverter.GetBytes).ToArray());
+        db.HashSet("vec:5", "vector", (new float[] { 4f, 4f, 4f, 4f }).SelectMany(BitConverter.GetBytes).ToArray());
+
+        // Index creation:
+        try { ft.DropIndex("vss_idx"); } catch { };
+        Assert.True(ft.Create("vss_idx", new FTCreateParams().On(IndexDataType.HASH).Prefix("vec:"),
+            new Schema()
+            .AddVectorField("vector", VectorField.VectorAlgo.FLAT,
+                new Dictionary<string, object>()
+                {
+                    ["TYPE"] = "FLOAT32",
+                    ["DIM"] = "4",
+                    ["DISTANCE_METRIC"] = "L2"
+                }
+        )));
+
+        // Sleep:
+        Thread.Sleep(2000);
+
+        // Search:
+        float[] vec = new[] { 2f, 2f, 3f, 3f };
+        var res = ft.Search("vss_idx",
+                    new Query("*=>[KNN 2 @vector $query_vec]")
+                    .AddParam("query_vec", vec.SelectMany(BitConverter.GetBytes).ToArray())
+                    .SetSortBy("__vector_score")
+                    .Dialect(2));
+        HashSet<string> resSet = new HashSet<string>();
+        foreach (var doc in res.Documents)
+        {
+            foreach (var item in doc.GetProperties())
+            {
+                if (item.Key == "__vector_score")
+                {
+                    resSet.Add($"id: {doc.Id}, score: {item.Value}");
+                }
+            }
+        }
+
+        HashSet<string> expectedResSet = new HashSet<string>()
+        {
+            "id: vec:2, score: 2",
+            "id: vec:3, score: 2",
+        };
+
+        Assert.Equal(expectedResSet, resSet);
+
+        //Advanced Search Queries:
+        // data load:
+        json.Set("warehouse:1", "$", new
+        {
+            city = "Boston",
+            location = "-71.057083, 42.361145",
+            inventory = new[] {
+                new {
+                    id = 15970,
+                    gender = "Men",
+                    season = new[] {"Fall", "Winter"},
+                    description = "Turtle Check Men Navy Blue Shirt",
+                    price = 34.95
+                },
+                new {
+                    id = 59263,
+                    gender = "Women",
+                    season = new[] {"Fall", "Winter", "Spring", "Summer"},
+                    description = "Titan Women Silver Watch",
+                    price = 129.99
+                },
+                new {
+                    id = 46885,
+                    gender = "Boys",
+                    season = new[] {"Fall"},
+                    description = "Ben 10 Boys Navy Blue Slippers",
+                    price = 45.99
+                }
+            }
+        });
+        json.Set("warehouse:2", "$", new
+        {
+            city = "Dallas",
+            location = "-96.808891, 32.779167",
+            inventory = new[] {
+                new {
+                    id = 51919,
+                    gender = "Women",
+                    season = new[] {"Summer"},
+                    description = "Nyk Black Horado Handbag",
+                    price = 52.49
+                },
+                new {
+                    id = 4602,
+                    gender = "Unisex",
+                    season = new[] {"Fall", "Winter"},
+                    description = "Wildcraft Red Trailblazer Backpack",
+                    price = 50.99
+                },
+                new {
+                    id = 37561,
+                    gender = "Girls",
+                    season = new[] {"Spring", "Summer"},
+                    description = "Madagascar3 Infant Pink Snapsuit Romper",
+                    price = 23.95
+                }
+            }
+        });
+
+        // Index creation:
+        try { ft.DropIndex("wh_idx"); } catch { };
+        Assert.True(ft.Create("wh_idx", new FTCreateParams()
+                                .On(IndexDataType.JSON)
+                                .Prefix("warehouse:"),
+                                new Schema().AddTextField(new FieldName("$.city", "city"))));
+
+        // Sleep:
+        Thread.Sleep(2000);
+
+        // Find all inventory ids from all the Boston warehouse that have a price > $50:
+        res = ft.Search("wh_idx",
+                        new Query("@city:Boston")
+                            .ReturnFields(new FieldName("$.inventory[?(@.price>50)].id", "result"))
+                            .Dialect(3));
+
+        Assert.Equal("[59263]", res.Documents[0]["result"].ToString());
+
+        // Find all inventory items in Dallas that are for Women or Girls:
+        res = ft.Search("wh_idx",
+                        new Query("@city:(Dallas)")
+                            .ReturnFields(new FieldName("$.inventory[?(@.gender==\"Women\" || @.gender==\"Girls\")]", "result"))
+                            .Dialect(3));
+        var expected = "[{\"id\":51919,\"gender\":\"Women\",\"season\":[\"Summer\"],\"description\":\"Nyk Black Horado Handbag\",\"price\":52.49},{\"id\":37561,\"gender\":\"Girls\",\"season\":[\"Spring\",\"Summer\"],\"description\":\"Madagascar3 Infant Pink Snapsuit Romper\",\"price\":23.95}]";
+        Assert.Equal(expected, res.Documents[0]["result"].ToString());
+
+        // Aggregation
+        // Data load:
+        json.Set("book:1", "$", new
+        {
+            title = "System Design Interview",
+            year = 2020,
+            price = 35.99
+        });
+        json.Set("book:2", "$", new
+        {
+            title = "The Age of AI: And Our Human Future",
+            year = 2021,
+            price = 13.99
+        });
+        json.Set("book:3", "$", new
+        {
+            title = "The Art of Doing Science and Engineering: Learning to Learn",
+            year = 2020,
+            price = 20.99
+        });
+        json.Set("book:4", "$", new
+        {
+            title = "Superintelligence: Path, Dangers, Stategies",
+            year = 2016,
+            price = 14.36
+        });
+
+        Assert.True(ft.Create("book_idx", new FTCreateParams()
+                        .On(IndexDataType.JSON)
+                        .Prefix("book:"),
+                        new Schema().AddTextField(new FieldName("$.title", "title"))
+                            .AddNumericField(new FieldName("$.year", "year"))
+                            .AddNumericField(new FieldName("$.price", "price"))));
+        // sleep:
+        Thread.Sleep(2000);
+
+        // Find the total number of books per year:
+        var request = new AggregationRequest("*").GroupBy("@year", Reducers.Count().As("count"));
+        var result = ft.Aggregate("book_idx", request);
+
+        resSet.Clear();
+        for (var i = 0; i < result.TotalResults; i++)
+        {
+            var row = result.GetRow(i);
+            resSet.Add($"{row["year"]}: {row["count"]}");
+        }
+        expectedResSet.Clear();
+        expectedResSet.Add("2016: 1");
+        expectedResSet.Add("2020: 2");
+        expectedResSet.Add("2021: 1");
+
+        Assert.Equal(expectedResSet, resSet);
+
+        // Sum of inventory dollar value by year:
+        request = new AggregationRequest("*").GroupBy("@year", Reducers.Sum("@price").As("sum"));
+        result = ft.Aggregate("book_idx", request);
+
+        resSet.Clear();
+        for (var i = 0; i < result.TotalResults; i++)
+        {
+            var row = result.GetRow(i);
+            resSet.Add($"{row["year"]}: {row["sum"]}");
+        }
+        expectedResSet.Clear();
+        expectedResSet.Add("2016: 14.36");
+        expectedResSet.Add("2020: 56.98");
+        expectedResSet.Add("2021: 13.99");
+
+        Assert.Equal(expectedResSet, resSet);
+    }
+
+    private static void SortAndCompare(List<string> expectedList, List<string> res)
+    {
+        res.Sort();
+        expectedList.Sort();
+
+        for (int i = 0; i < res.Count; i++)
+        {
+            Assert.Equal(expectedList[i], res[i].ToString());
+        }
+    }
 }
diff --git a/tests/NRedisStack.Tests/Search/SearchTests.cs b/tests/NRedisStack.Tests/Search/SearchTests.cs
index 2c9f3721..61fd37a1 100644
--- a/tests/NRedisStack.Tests/Search/SearchTests.cs
+++ b/tests/NRedisStack.Tests/Search/SearchTests.cs
@@ -1012,7 +1012,7 @@ public void TestAggregationGroupBy()
         var res = ft.Aggregate("idx", req).GetRow(0);
         Assert.True(res.ContainsKey("parent"));
         Assert.Equal(res["parent"], "redis");
-        Assert.Equal(res["__generated_aliascount"], "3");
+        // Assert.Equal(res["__generated_aliascount"], "3");
 
         req = new AggregationRequest("redis").GroupBy("@parent", Reducers.CountDistinct("@title"));
         res = ft.Aggregate("idx", req).GetRow(0);