diff --git a/Directory.Build.props b/Directory.Build.props
index e6dab0f8..383c4cfe 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -23,7 +23,7 @@
true
true
true
- $(NoWarn);CS1591;NRS001
+ $(NoWarn);CS1591
$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::get_Windows())))
diff --git a/src/NRedisStack/Experiments.cs b/src/NRedisStack/Experiments.cs
index 38845d05..09b9bed3 100644
--- a/src/NRedisStack/Experiments.cs
+++ b/src/NRedisStack/Experiments.cs
@@ -5,9 +5,6 @@ namespace NRedisStack
internal static class Experiments
{
public const string UrlFormat = "https://redis.github.io/NRedisStack/exp/";
-
- // ReSharper disable once InconsistentNaming
- public const string Server_8_4 = "NRS001";
}
}
diff --git a/src/NRedisStack/Json/JsonCommandBuilder.cs b/src/NRedisStack/Json/JsonCommandBuilder.cs
index bee4061d..ae41775a 100644
--- a/src/NRedisStack/Json/JsonCommandBuilder.cs
+++ b/src/NRedisStack/Json/JsonCommandBuilder.cs
@@ -1,4 +1,6 @@
-using NRedisStack.Json.DataTypes;
+using System.ComponentModel;
+using System.Diagnostics;
+using NRedisStack.Json.DataTypes;
using NRedisStack.Json.Literals;
using NRedisStack.RedisStackCommands;
using StackExchange.Redis;
@@ -16,14 +18,41 @@ public static SerializedCommand Resp(RedisKey key, string? path = null)
: new SerializedCommand(JSON.RESP, key, path!);
}
- public static SerializedCommand Set(RedisKey key, RedisValue path, RedisValue json, When when = When.Always)
+#if DEBUG // avoid internal use
+ [Obsolete("Specify FPHA explicitly", true)]
+#endif
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public static SerializedCommand Set(RedisKey key, RedisValue path, RedisValue json, When when)
+ => Set(key, path, json, when, JsonNumericArrayStorage.NotSpecified);
+
+ public static SerializedCommand Set(RedisKey key, RedisValue path, RedisValue json, When when = When.Always, JsonNumericArrayStorage fpha = JsonNumericArrayStorage.NotSpecified)
{
- return when switch
+ int count = 3;
+ if (when is (When.Exists or When.NotExists)) count++;
+ if (fpha != JsonNumericArrayStorage.NotSpecified) count += 2;
+ object[] args = new object[count];
+ args[0] = key;
+ args[1] = path;
+ args[2] = json;
+ int i = 3;
+ if (when is (When.Exists or When.NotExists))
+ {
+ args[i++] = when == When.Exists ? "XX" : "NX";
+ }
+ if (fpha != JsonNumericArrayStorage.NotSpecified)
{
- When.Exists => new(JSON.SET, key, path, json, "XX"),
- When.NotExists => new(JSON.SET, key, path, json, "NX"),
- _ => new(JSON.SET, key, path, json)
- };
+ args[i++] = "FPHA";
+ args[i++] = fpha switch
+ {
+ JsonNumericArrayStorage.BF16 => "BF16",
+ JsonNumericArrayStorage.FP16 => "FP16",
+ JsonNumericArrayStorage.FP32 => "FP32",
+ JsonNumericArrayStorage.FP64 => "FP64",
+ _ => fpha.ToString(),
+ };
+ }
+ Debug.Assert(i == count, $"Arg count mismatch; check {nameof(JsonCommandBuilder)}.{nameof(Set)}");
+ return new(JSON.SET, args);
}
public static SerializedCommand MSet(KeyPathValue[] KeyPathValueList)
diff --git a/src/NRedisStack/Json/JsonCommands.cs b/src/NRedisStack/Json/JsonCommands.cs
index c4ec254e..1fc6622e 100644
--- a/src/NRedisStack/Json/JsonCommands.cs
+++ b/src/NRedisStack/Json/JsonCommands.cs
@@ -1,4 +1,5 @@
-using NRedisStack.Json.DataTypes;
+using System.ComponentModel;
+using NRedisStack.Json.DataTypes;
using StackExchange.Redis;
using System.Text.Json;
using System.Text.Json.Nodes;
@@ -20,19 +21,28 @@ public RedisResult[] Resp(RedisKey key, string? path = null)
return (RedisResult[])result!;
}
+ ///
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public bool Set(RedisKey key, RedisValue path, object obj, When when, JsonSerializerOptions? serializerOptions)
+ => Set(key, path, JsonSerializer.Serialize(obj, serializerOptions), when, JsonNumericArrayStorage.NotSpecified);
+
+ ///
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public bool Set(RedisKey key, RedisValue path, RedisValue json, When when)
+ => Set(key, path, json, when, JsonNumericArrayStorage.NotSpecified);
+
///
public bool Set(RedisKey key, RedisValue path, object obj, When when = When.Always,
- JsonSerializerOptions? serializerOptions = default)
+ JsonSerializerOptions? serializerOptions = default, JsonNumericArrayStorage fpha = JsonNumericArrayStorage.NotSpecified)
{
string json = JsonSerializer.Serialize(obj, options: serializerOptions);
- return Set(key, path, json, when);
+ return Set(key, path, json, when, fpha);
}
///
- public bool Set(RedisKey key, RedisValue path, RedisValue json, When when = When.Always)
- {
- return db.Execute(JsonCommandBuilder.Set(key, path, json, when)).OKtoBoolean();
- }
+ public bool Set(RedisKey key, RedisValue path, RedisValue json, When when = When.Always, JsonNumericArrayStorage fpha = JsonNumericArrayStorage.NotSpecified)
+ => db.Execute(JsonCommandBuilder.Set(key, path, json, when, fpha)).OKtoBoolean();
+
///
public bool MSet(KeyPathValue[] KeyPathValueList)
diff --git a/src/NRedisStack/Json/JsonCommandsAsync.cs b/src/NRedisStack/Json/JsonCommandsAsync.cs
index 9ebcfebc..a8deebbf 100644
--- a/src/NRedisStack/Json/JsonCommandsAsync.cs
+++ b/src/NRedisStack/Json/JsonCommandsAsync.cs
@@ -1,4 +1,5 @@
-using NRedisStack.Json.DataTypes;
+using System.ComponentModel;
+using NRedisStack.Json.DataTypes;
using StackExchange.Redis;
using System.Text.Json;
using System.Text.Json.Nodes;
@@ -125,17 +126,27 @@ public async Task RespAsync(RedisKey key, string? path = null)
return (RedisResult[])result!;
}
+ ///
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public Task SetAsync(RedisKey key, RedisValue path, object obj, When when, JsonSerializerOptions? serializerOptions)
+ => SetAsync(key, path, obj, when, serializerOptions, JsonNumericArrayStorage.NotSpecified);
+
+ ///
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ public Task SetAsync(RedisKey key, RedisValue path, RedisValue json, When when)
+ => SetAsync(key, path, json, when, JsonNumericArrayStorage.NotSpecified);
+
///
public Task SetAsync(RedisKey key, RedisValue path, object obj, When when = When.Always,
- JsonSerializerOptions? serializerOptions = default)
+ JsonSerializerOptions? serializerOptions = default, JsonNumericArrayStorage fpha = JsonNumericArrayStorage.NotSpecified)
{
string json = JsonSerializer.Serialize(obj, options: serializerOptions);
- return SetAsync(key, path, json, when);
+ return SetAsync(key, path, json, when, fpha);
}
- public async Task SetAsync(RedisKey key, RedisValue path, RedisValue json, When when = When.Always)
+ public async Task SetAsync(RedisKey key, RedisValue path, RedisValue json, When when = When.Always, JsonNumericArrayStorage fpha = JsonNumericArrayStorage.NotSpecified)
{
- return (await db.ExecuteAsync(JsonCommandBuilder.Set(key, path, json, when))).OKtoBoolean();
+ return (await db.ExecuteAsync(JsonCommandBuilder.Set(key, path, json, when, fpha))).OKtoBoolean();
}
public async Task MSetAsync(KeyPathValue[] KeyPathValueList)
diff --git a/src/NRedisStack/Json/JsonNumericArrayStorage.cs b/src/NRedisStack/Json/JsonNumericArrayStorage.cs
new file mode 100644
index 00000000..941178c8
--- /dev/null
+++ b/src/NRedisStack/Json/JsonNumericArrayStorage.cs
@@ -0,0 +1,32 @@
+namespace NRedisStack;
+
+///
+/// Specifies the storage type for numeric values when used in a JSON array.
+///
+public enum JsonNumericArrayStorage
+{
+ ///
+ /// Default behaviour, no FPHA usage.
+ ///
+ NotSpecified = 0,
+
+ ///
+ /// "Brain" floating-point 16-bit.
+ ///
+ BF16 = 1,
+
+ ///
+ /// IEEE 754 16-bit.
+ ///
+ FP16 = 2,
+
+ ///
+ /// IEEE 754 32-bit.
+ ///
+ FP32 = 3,
+
+ ///
+ /// IEEE 754 64-bit.
+ ///
+ FP64 = 4,
+}
diff --git a/src/NRedisStack/Json/JsonType.cs b/src/NRedisStack/Json/JsonType.cs
index 6e5ac114..8925e155 100644
--- a/src/NRedisStack/Json/JsonType.cs
+++ b/src/NRedisStack/Json/JsonType.cs
@@ -10,4 +10,4 @@ public enum JsonType
STRING = 5,
ARRAY = 6,
OBJECT = 7
-}
\ No newline at end of file
+}
diff --git a/src/NRedisStack/PublicAPI/PublicAPI.Shipped.txt b/src/NRedisStack/PublicAPI/PublicAPI.Shipped.txt
index 8652ade9..fe006b19 100644
--- a/src/NRedisStack/PublicAPI/PublicAPI.Shipped.txt
+++ b/src/NRedisStack/PublicAPI/PublicAPI.Shipped.txt
@@ -1,8 +1,13 @@
#nullable enable
abstract NRedisStack.Search.Aggregation.Reducer.Name.get -> string!
+abstract NRedisStack.Search.VectorData.AsRedisValue() -> StackExchange.Redis.RedisValue
+abstract NRedisStack.Search.VectorData.Dispose() -> void
+abstract NRedisStack.Search.VectorData.Span.get -> System.Span
const NRedisStack.Core.DataTypes.StreamSpecialIds.AllMessagesId = "0" -> string!
const NRedisStack.Core.DataTypes.StreamSpecialIds.NewMessagesId = "$" -> string!
const NRedisStack.Core.DataTypes.StreamSpecialIds.UndeliveredMessagesId = ">" -> string!
+const NRedisStack.Search.HybridSearchQuery.Fields.Key = "@__key" -> string!
+const NRedisStack.Search.HybridSearchQuery.Fields.Score = "@__score" -> string!
NRedisStack.Auxiliary
NRedisStack.Bloom.DataTypes.BloomInformation
NRedisStack.Bloom.DataTypes.BloomInformation.Capacity.get -> long
@@ -154,6 +159,7 @@ NRedisStack.DataTypes.TimeSeriesTuple.Time.get -> NRedisStack.DataTypes.TimeStam
NRedisStack.DataTypes.TimeSeriesTuple.TimeSeriesTuple(NRedisStack.DataTypes.TimeStamp time, double val) -> void
NRedisStack.DataTypes.TimeSeriesTuple.Val.get -> double
NRedisStack.DataTypes.TimeStamp
+NRedisStack.DataTypes.TimeStamp.Equals(NRedisStack.DataTypes.TimeStamp other) -> bool
NRedisStack.DataTypes.TimeStamp.TimeStamp() -> void
NRedisStack.DataTypes.TimeStamp.TimeStamp(long timestamp) -> void
NRedisStack.DataTypes.TimeStamp.TimeStamp(string! timestamp) -> void
@@ -287,6 +293,7 @@ NRedisStack.IJsonCommandsAsync.ToggleAsync(StackExchange.Redis.RedisKey key, str
NRedisStack.IJsonCommandsAsync.TypeAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommands
NRedisStack.ISearchCommands.Aggregate(string! index, NRedisStack.Search.AggregationRequest! query) -> NRedisStack.Search.AggregationResult!
+NRedisStack.ISearchCommands.AggregateEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IEnumerable!
NRedisStack.ISearchCommands.AliasAdd(string! alias, string! index) -> bool
NRedisStack.ISearchCommands.AliasDel(string! alias) -> bool
NRedisStack.ISearchCommands.AliasUpdate(string! alias, string! index) -> bool
@@ -294,7 +301,9 @@ NRedisStack.ISearchCommands.Alter(string! index, NRedisStack.Search.Schema! sche
NRedisStack.ISearchCommands.ConfigGet(string! option) -> System.Collections.Generic.Dictionary!
NRedisStack.ISearchCommands.ConfigSet(string! option, string! value) -> bool
NRedisStack.ISearchCommands.Create(string! indexName, NRedisStack.Search.FTCreateParams! parameters, NRedisStack.Search.Schema! schema) -> bool
+NRedisStack.ISearchCommands.CursorDel(NRedisStack.Search.AggregationResult! result) -> bool
NRedisStack.ISearchCommands.CursorDel(string! indexName, long cursorId) -> bool
+NRedisStack.ISearchCommands.CursorRead(NRedisStack.Search.AggregationResult! result, int? count = null) -> NRedisStack.Search.AggregationResult!
NRedisStack.ISearchCommands.CursorRead(string! indexName, long cursorId, int? count = null) -> NRedisStack.Search.AggregationResult!
NRedisStack.ISearchCommands.DictAdd(string! dict, params string![]! terms) -> long
NRedisStack.ISearchCommands.DictDel(string! dict, params string![]! terms) -> long
@@ -302,6 +311,7 @@ NRedisStack.ISearchCommands.DictDump(string! dict) -> StackExchange.Redis.RedisR
NRedisStack.ISearchCommands.DropIndex(string! indexName, bool dd = false) -> bool
NRedisStack.ISearchCommands.Explain(string! indexName, string! query, int? dialect = null) -> string!
NRedisStack.ISearchCommands.ExplainCli(string! indexName, string! query, int? dialect = null) -> StackExchange.Redis.RedisResult![]!
+NRedisStack.ISearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> NRedisStack.Search.HybridSearchResult!
NRedisStack.ISearchCommands.Info(StackExchange.Redis.RedisValue index) -> NRedisStack.Search.DataTypes.InfoResult!
NRedisStack.ISearchCommands.ProfileAggregate(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Tuple!>!
NRedisStack.ISearchCommands.ProfileOnAggregate(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Tuple!
@@ -320,6 +330,7 @@ NRedisStack.ISearchCommands.TagVals(string! indexName, string! fieldName) -> Sta
NRedisStack.ISearchCommands._List() -> StackExchange.Redis.RedisResult![]!
NRedisStack.ISearchCommandsAsync
NRedisStack.ISearchCommandsAsync.AggregateAsync(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Threading.Tasks.Task!
+NRedisStack.ISearchCommandsAsync.AggregateAsyncEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IAsyncEnumerable!
NRedisStack.ISearchCommandsAsync.AliasAddAsync(string! alias, string! index) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.AliasDelAsync(string! alias) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.AliasUpdateAsync(string! alias, string! index) -> System.Threading.Tasks.Task!
@@ -327,7 +338,9 @@ NRedisStack.ISearchCommandsAsync.AlterAsync(string! index, NRedisStack.Search.Sc
NRedisStack.ISearchCommandsAsync.ConfigGetAsync(string! option) -> System.Threading.Tasks.Task!>!
NRedisStack.ISearchCommandsAsync.ConfigSetAsync(string! option, string! value) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.CreateAsync(string! indexName, NRedisStack.Search.FTCreateParams! parameters, NRedisStack.Search.Schema! schema) -> System.Threading.Tasks.Task!
+NRedisStack.ISearchCommandsAsync.CursorDelAsync(NRedisStack.Search.AggregationResult! result) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.CursorDelAsync(string! indexName, long cursorId) -> System.Threading.Tasks.Task!
+NRedisStack.ISearchCommandsAsync.CursorReadAsync(NRedisStack.Search.AggregationResult! result, int? count = null) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.CursorReadAsync(string! indexName, long cursorId, int? count = null) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.DictAddAsync(string! dict, params string![]! terms) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.DictDelAsync(string! dict, params string![]! terms) -> System.Threading.Tasks.Task!
@@ -335,6 +348,7 @@ NRedisStack.ISearchCommandsAsync.DictDumpAsync(string! dict) -> System.Threading
NRedisStack.ISearchCommandsAsync.DropIndexAsync(string! indexName, bool dd = false) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.ExplainAsync(string! indexName, string! query, int? dialect = null) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.ExplainCliAsync(string! indexName, string! query, int? dialect = null) -> System.Threading.Tasks.Task!
+NRedisStack.ISearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.InfoAsync(StackExchange.Redis.RedisValue index) -> System.Threading.Tasks.Task!
NRedisStack.ISearchCommandsAsync.ProfileAggregateAsync(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Threading.Tasks.Task!>!>!
NRedisStack.ISearchCommandsAsync.ProfileOnAggregateAsync(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Threading.Tasks.Task!>!
@@ -464,8 +478,10 @@ NRedisStack.JsonCommands.NumIncrby(StackExchange.Redis.RedisKey key, string! pat
NRedisStack.JsonCommands.ObjKeys(StackExchange.Redis.RedisKey key, string? path = null) -> System.Collections.Generic.IEnumerable!>!
NRedisStack.JsonCommands.ObjLen(StackExchange.Redis.RedisKey key, string? path = null) -> long?[]!
NRedisStack.JsonCommands.Resp(StackExchange.Redis.RedisKey key, string? path = null) -> StackExchange.Redis.RedisResult![]!
-NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when = StackExchange.Redis.When.Always, System.Text.Json.JsonSerializerOptions? serializerOptions = null) -> bool
-NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> bool
+NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when = StackExchange.Redis.When.Always, System.Text.Json.JsonSerializerOptions? serializerOptions = null, NRedisStack.JsonNumericArrayStorage fpha = NRedisStack.JsonNumericArrayStorage.NotSpecified) -> bool
+NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when, System.Text.Json.JsonSerializerOptions? serializerOptions) -> bool
+NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when = StackExchange.Redis.When.Always, NRedisStack.JsonNumericArrayStorage fpha = NRedisStack.JsonNumericArrayStorage.NotSpecified) -> bool
+NRedisStack.JsonCommands.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when) -> bool
NRedisStack.JsonCommands.SetFromDirectory(StackExchange.Redis.RedisValue path, string! filesPath, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> int
NRedisStack.JsonCommands.SetFromFile(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, string! filePath, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> bool
NRedisStack.JsonCommands.StrAppend(StackExchange.Redis.RedisKey key, string! value, string? path = null) -> long?[]!
@@ -496,14 +512,22 @@ NRedisStack.JsonCommandsAsync.NumIncrbyAsync(StackExchange.Redis.RedisKey key, s
NRedisStack.JsonCommandsAsync.ObjKeysAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!>!>!
NRedisStack.JsonCommandsAsync.ObjLenAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.RespAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
-NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when = StackExchange.Redis.When.Always, System.Text.Json.JsonSerializerOptions? serializerOptions = null) -> System.Threading.Tasks.Task!
-NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> System.Threading.Tasks.Task!
+NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when = StackExchange.Redis.When.Always, System.Text.Json.JsonSerializerOptions? serializerOptions = null, NRedisStack.JsonNumericArrayStorage fpha = NRedisStack.JsonNumericArrayStorage.NotSpecified) -> System.Threading.Tasks.Task!
+NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, object! obj, StackExchange.Redis.When when, System.Text.Json.JsonSerializerOptions? serializerOptions) -> System.Threading.Tasks.Task!
+NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when = StackExchange.Redis.When.Always, NRedisStack.JsonNumericArrayStorage fpha = NRedisStack.JsonNumericArrayStorage.NotSpecified) -> System.Threading.Tasks.Task!
+NRedisStack.JsonCommandsAsync.SetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.SetFromDirectoryAsync(StackExchange.Redis.RedisValue path, string! filesPath, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.SetFromFileAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, string! filePath, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.StrAppendAsync(StackExchange.Redis.RedisKey key, string! value, string? path = null) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.StrLenAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.ToggleAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
NRedisStack.JsonCommandsAsync.TypeAsync(StackExchange.Redis.RedisKey key, string? path = null) -> System.Threading.Tasks.Task!
+NRedisStack.JsonNumericArrayStorage
+NRedisStack.JsonNumericArrayStorage.BF16 = 1 -> NRedisStack.JsonNumericArrayStorage
+NRedisStack.JsonNumericArrayStorage.FP16 = 2 -> NRedisStack.JsonNumericArrayStorage
+NRedisStack.JsonNumericArrayStorage.FP32 = 3 -> NRedisStack.JsonNumericArrayStorage
+NRedisStack.JsonNumericArrayStorage.FP64 = 4 -> NRedisStack.JsonNumericArrayStorage
+NRedisStack.JsonNumericArrayStorage.NotSpecified = 0 -> NRedisStack.JsonNumericArrayStorage
NRedisStack.JsonType
NRedisStack.JsonType.ARRAY = 6 -> NRedisStack.JsonType
NRedisStack.JsonType.BOOLEAN = 2 -> NRedisStack.JsonType
@@ -516,6 +540,8 @@ NRedisStack.JsonType.UNKNOWN = 0 -> NRedisStack.JsonType
NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Avg = 0 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Count = 5 -> NRedisStack.Literals.Enums.TsAggregation
+NRedisStack.Literals.Enums.TsAggregation.CountAll = 14 -> NRedisStack.Literals.Enums.TsAggregation
+NRedisStack.Literals.Enums.TsAggregation.CountNan = 13 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.First = 6 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Last = 7 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Max = 3 -> NRedisStack.Literals.Enums.TsAggregation
@@ -525,8 +551,6 @@ NRedisStack.Literals.Enums.TsAggregation.StdP = 8 -> NRedisStack.Literals.Enums.
NRedisStack.Literals.Enums.TsAggregation.StdS = 9 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Sum = 1 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.Twa = 12 -> NRedisStack.Literals.Enums.TsAggregation
-NRedisStack.Literals.Enums.TsAggregation.CountNan = 13 -> NRedisStack.Literals.Enums.TsAggregation
-NRedisStack.Literals.Enums.TsAggregation.CountAll = 14 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.VarP = 10 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsAggregation.VarS = 11 -> NRedisStack.Literals.Enums.TsAggregation
NRedisStack.Literals.Enums.TsBucketTimestamps
@@ -580,8 +604,14 @@ NRedisStack.Search.Aggregation.Reducer.Reducer(string? field) -> void
NRedisStack.Search.Aggregation.Reducers
NRedisStack.Search.Aggregation.Row
NRedisStack.Search.Aggregation.Row.ContainsKey(string! key) -> bool
+NRedisStack.Search.Aggregation.Row.Enumerator
+NRedisStack.Search.Aggregation.Row.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair
+NRedisStack.Search.Aggregation.Row.Enumerator.Enumerator() -> void
+NRedisStack.Search.Aggregation.Row.Enumerator.MoveNext() -> bool
+NRedisStack.Search.Aggregation.Row.FieldCount() -> int
NRedisStack.Search.Aggregation.Row.Get(string! key) -> object!
NRedisStack.Search.Aggregation.Row.GetDouble(string! key) -> double
+NRedisStack.Search.Aggregation.Row.GetEnumerator() -> NRedisStack.Search.Aggregation.Row.Enumerator
NRedisStack.Search.Aggregation.Row.GetLong(string! key) -> long
NRedisStack.Search.Aggregation.Row.GetString(string! key) -> string?
NRedisStack.Search.Aggregation.Row.Row() -> void
@@ -623,6 +653,11 @@ NRedisStack.Search.AggregationResult.GetResults() -> System.Collections.Generic.
NRedisStack.Search.AggregationResult.GetRow(int index) -> NRedisStack.Search.Aggregation.Row
NRedisStack.Search.AggregationResult.this[int index].get -> System.Collections.Generic.Dictionary?
NRedisStack.Search.AggregationResult.TotalResults.get -> long
+NRedisStack.Search.ApplyExpression
+NRedisStack.Search.ApplyExpression.Alias.get -> string?
+NRedisStack.Search.ApplyExpression.ApplyExpression() -> void
+NRedisStack.Search.ApplyExpression.ApplyExpression(string! expression, string? alias = null) -> void
+NRedisStack.Search.ApplyExpression.Expression.get -> string!
NRedisStack.Search.DataTypes.InfoResult
NRedisStack.Search.DataTypes.InfoResult.Attributes.get -> System.Collections.Generic.Dictionary![]!
NRedisStack.Search.DataTypes.InfoResult.BytesPerRecordAvg.get -> double
@@ -701,9 +736,62 @@ NRedisStack.Search.FTSpellCheckParams.FTSpellCheckParams() -> void
NRedisStack.Search.FTSpellCheckParams.GetArgs() -> System.Collections.Generic.List