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! NRedisStack.Search.FTSpellCheckParams.IncludeTerm(string! dict) -> NRedisStack.Search.FTSpellCheckParams! NRedisStack.Search.FTSpellCheckParams.SerializeRedisArgs() -> void +NRedisStack.Search.HybridSearchQuery +NRedisStack.Search.HybridSearchQuery.AllowModification() -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Apply(NRedisStack.Search.ApplyExpression applyExpression) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Apply(params NRedisStack.Search.ApplyExpression[]! applyExpression) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Combine(NRedisStack.Search.HybridSearchQuery.Combiner! combiner) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Combiner +NRedisStack.Search.HybridSearchQuery.Combiner.Combiner() -> void +NRedisStack.Search.HybridSearchQuery.Fields +NRedisStack.Search.HybridSearchQuery.Filter(string! expression) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.GroupBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.GroupBy(string! field) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.HybridSearchQuery() -> void +NRedisStack.Search.HybridSearchQuery.Limit(int offset, int count) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.NoSort() -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Reduce(NRedisStack.Search.Aggregation.Reducer! reducer) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Reduce(params NRedisStack.Search.Aggregation.Reducer![]! reducers) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.ReturnFields(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.ReturnFields(string! field) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Search(NRedisStack.Search.HybridSearchQuery.SearchConfig query) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.SearchConfig +NRedisStack.Search.HybridSearchQuery.SearchConfig.Query.get -> string! +NRedisStack.Search.HybridSearchQuery.SearchConfig.ScoreAlias.get -> string? +NRedisStack.Search.HybridSearchQuery.SearchConfig.Scorer.get -> NRedisStack.Search.Scorer? +NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig() -> void +NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig(string! query, NRedisStack.Search.Scorer? scorer = null, string? scoreAlias = null) -> void +NRedisStack.Search.HybridSearchQuery.SearchConfig.WithQuery(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig +NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScoreAlias(string? alias) -> NRedisStack.Search.HybridSearchQuery.SearchConfig +NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScorer(NRedisStack.Search.Scorer? scorer) -> NRedisStack.Search.HybridSearchQuery.SearchConfig +NRedisStack.Search.HybridSearchQuery.SortBy(NRedisStack.Search.Aggregation.SortedField! field) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.SortBy(params NRedisStack.Search.Aggregation.SortedField![]! fields) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.SortBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.SortBy(string! field) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.Timeout(System.TimeSpan timeout) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.VectorSearch(NRedisStack.Search.HybridSearchQuery.VectorSearchConfig config) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.VectorSearch(string! fieldName, NRedisStack.Search.VectorData! vectorData) -> NRedisStack.Search.HybridSearchQuery! +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.FieldName.get -> string! +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Filter.get -> string? +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Method.get -> NRedisStack.Search.VectorSearchMethod? +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.ScoreAlias.get -> string? +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorData.get -> NRedisStack.Search.VectorData? +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig() -> void +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig(string! fieldName, NRedisStack.Search.VectorData! vectorData, NRedisStack.Search.VectorSearchMethod? method = null, string? filter = null, string? scoreAlias = null) -> void +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFieldName(string! fieldName) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFilter(string? filter) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithMethod(NRedisStack.Search.VectorSearchMethod? method) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithScoreAlias(string? scoreAlias) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithVectorData(NRedisStack.Search.VectorData! vectorData) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig +NRedisStack.Search.HybridSearchResult +NRedisStack.Search.HybridSearchResult.ExecutionTime.get -> System.TimeSpan +NRedisStack.Search.HybridSearchResult.Results.get -> NRedisStack.Search.Document![]! +NRedisStack.Search.HybridSearchResult.TotalResults.get -> long NRedisStack.Search.Literals.Enums.IndexDataType NRedisStack.Search.Literals.Enums.IndexDataType.HASH = 0 -> NRedisStack.Search.Literals.Enums.IndexDataType NRedisStack.Search.Literals.Enums.IndexDataType.JSON = 1 -> NRedisStack.Search.Literals.Enums.IndexDataType +NRedisStack.Search.Parameters NRedisStack.Search.ProfilingInformation NRedisStack.Search.ProfilingInformation.Info.get -> StackExchange.Redis.RedisResult! NRedisStack.Search.ProfilingInformation.ProfilingInformation(StackExchange.Redis.RedisResult! info) -> void @@ -772,12 +860,15 @@ NRedisStack.Search.Query.WithScores.get -> bool NRedisStack.Search.Query.WithScores.set -> void NRedisStack.Search.Schema NRedisStack.Search.Schema.AddField(NRedisStack.Search.Schema.Field! field) -> NRedisStack.Search.Schema! +NRedisStack.Search.Schema.AddFlatVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddGeoField(NRedisStack.Search.FieldName! name, bool sortable = false, bool noIndex = false, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddGeoField(string! name, bool sortable = false, bool noIndex = false, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddGeoShapeField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem system, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddGeoShapeField(string! name, NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem system, bool missingIndex = false) -> NRedisStack.Search.Schema! +NRedisStack.Search.Schema.AddHnswVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, int maxOutgoingConnections = 16, int maxConnectedNeighbors = 200, int maxTopCandidates = 10, double boundaryFactor = 0.01, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddNumericField(NRedisStack.Search.FieldName! name, bool sortable = false, bool noIndex = false, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddNumericField(string! name, bool sortable = false, bool noIndex = false, bool missingIndex = false) -> NRedisStack.Search.Schema! +NRedisStack.Search.Schema.AddSvsVanamaVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm compressionAlgorithm = NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.NotSpecified, int constructionWindowSize = 200, int graphMaxDegree = 32, int searchWindowSize = 10, double rangeSearchApproximationFactor = 0.01, int trainingThreshold = 0, int reducedDimensions = 0, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddTagField(NRedisStack.Search.FieldName! name, bool sortable = false, bool unf = false, bool noIndex = false, string! separator = ",", bool caseSensitive = false, bool withSuffixTrie = false, bool missingIndex = false, bool emptyIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddTagField(string! name, bool sortable = false, bool unf = false, bool noIndex = false, string! separator = ",", bool caseSensitive = false, bool withSuffixTrie = false, bool missingIndex = false, bool emptyIndex = false) -> NRedisStack.Search.Schema! NRedisStack.Search.Schema.AddTextField(NRedisStack.Search.FieldName! name, double weight = 1, bool sortable = false, bool unf = false, bool noStem = false, string? phonetic = null, bool noIndex = false, bool withSuffixTrie = false, bool missingIndex = false, bool emptyIndex = false) -> NRedisStack.Search.Schema! @@ -795,6 +886,8 @@ NRedisStack.Search.Schema.FieldType.Numeric = 3 -> NRedisStack.Search.Schema.Fie NRedisStack.Search.Schema.FieldType.Tag = 4 -> NRedisStack.Search.Schema.FieldType NRedisStack.Search.Schema.FieldType.Text = 0 -> NRedisStack.Search.Schema.FieldType NRedisStack.Search.Schema.FieldType.Vector = 5 -> NRedisStack.Search.Schema.FieldType +NRedisStack.Search.Schema.FlatVectorField +NRedisStack.Search.Schema.FlatVectorField.FlatVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void NRedisStack.Search.Schema.GeoField NRedisStack.Search.Schema.GeoField.MissingIndex.get -> bool NRedisStack.Search.Schema.GeoField.NoIndex.get -> bool @@ -804,11 +897,37 @@ NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem.FLAT = 0 -> NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem.SPHERICAL = 1 -> NRedisStack.Search.Schema.GeoShapeField.CoordinateSystem NRedisStack.Search.Schema.GeoShapeField.MissingIndex.get -> bool +NRedisStack.Search.Schema.HnswVectorField +NRedisStack.Search.Schema.HnswVectorField.BoundaryFactor.get -> double +NRedisStack.Search.Schema.HnswVectorField.BoundaryFactor.set -> void +NRedisStack.Search.Schema.HnswVectorField.HnswVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void +NRedisStack.Search.Schema.HnswVectorField.MaxConnectedNeighbors.get -> int +NRedisStack.Search.Schema.HnswVectorField.MaxConnectedNeighbors.set -> void +NRedisStack.Search.Schema.HnswVectorField.MaxOutgoingConnections.get -> int +NRedisStack.Search.Schema.HnswVectorField.MaxOutgoingConnections.set -> void +NRedisStack.Search.Schema.HnswVectorField.MaxTopCandidates.get -> int +NRedisStack.Search.Schema.HnswVectorField.MaxTopCandidates.set -> void NRedisStack.Search.Schema.NumericField NRedisStack.Search.Schema.NumericField.MissingIndex.get -> bool NRedisStack.Search.Schema.NumericField.NoIndex.get -> bool NRedisStack.Search.Schema.NumericField.Sortable.get -> bool NRedisStack.Search.Schema.Schema() -> void +NRedisStack.Search.Schema.SvsVanamaVectorField +NRedisStack.Search.Schema.SvsVanamaVectorField.CompressionAlgorithm.get -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.SvsVanamaVectorField.CompressionAlgorithm.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.ConstructionWindowSize.get -> int +NRedisStack.Search.Schema.SvsVanamaVectorField.ConstructionWindowSize.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.GraphMaxDegree.get -> int +NRedisStack.Search.Schema.SvsVanamaVectorField.GraphMaxDegree.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.RangeSearchApproximationFactor.get -> double +NRedisStack.Search.Schema.SvsVanamaVectorField.RangeSearchApproximationFactor.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.ReducedDimensions.get -> int +NRedisStack.Search.Schema.SvsVanamaVectorField.ReducedDimensions.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.SearchWindowSize.get -> int +NRedisStack.Search.Schema.SvsVanamaVectorField.SearchWindowSize.set -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.SvsVanamaVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void +NRedisStack.Search.Schema.SvsVanamaVectorField.TrainingThreshold.get -> int +NRedisStack.Search.Schema.SvsVanamaVectorField.TrainingThreshold.set -> void NRedisStack.Search.Schema.TagField NRedisStack.Search.Schema.TagField.CaseSensitive.get -> bool NRedisStack.Search.Schema.TagField.EmptyIndex.get -> bool @@ -833,19 +952,50 @@ NRedisStack.Search.Schema.TextField.WithSuffixTrie.get -> bool NRedisStack.Search.Schema.VectorField NRedisStack.Search.Schema.VectorField.Algorithm.get -> NRedisStack.Search.Schema.VectorField.VectorAlgo NRedisStack.Search.Schema.VectorField.Attributes.get -> System.Collections.Generic.Dictionary? +NRedisStack.Search.Schema.VectorField.Dimensions.get -> int +NRedisStack.Search.Schema.VectorField.Dimensions.set -> void +NRedisStack.Search.Schema.VectorField.DistanceMetric.get -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric +NRedisStack.Search.Schema.VectorField.DistanceMetric.set -> void NRedisStack.Search.Schema.VectorField.MissingIndex.get -> bool +NRedisStack.Search.Schema.VectorField.Type.get -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.Type.set -> void NRedisStack.Search.Schema.VectorField.VectorAlgo NRedisStack.Search.Schema.VectorField.VectorAlgo.FLAT = 0 -> NRedisStack.Search.Schema.VectorField.VectorAlgo NRedisStack.Search.Schema.VectorField.VectorAlgo.HNSW = 1 -> NRedisStack.Search.Schema.VectorField.VectorAlgo +NRedisStack.Search.Schema.VectorField.VectorAlgo.SVS_VAMANA = 2 -> NRedisStack.Search.Schema.VectorField.VectorAlgo +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LeanVec4x8 = 5 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LeanVec8x8 = 6 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4 = 2 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4x4 = 3 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4x8 = 4 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ8 = 1 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm +NRedisStack.Search.Schema.VectorField.VectorDistanceMetric +NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.CosineDistance = 3 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric +NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.EuclideanDistance = 1 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric +NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.InnerProduct = 2 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric +NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric NRedisStack.Search.Schema.VectorField.VectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorAlgo algorithm, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void NRedisStack.Search.Schema.VectorField.VectorField(string! name, NRedisStack.Search.Schema.VectorField.VectorAlgo algorithm, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void +NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.VectorType.BFLOAT16 = 3 -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.VectorType.FLOAT16 = 4 -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.VectorType.FLOAT32 = 1 -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.VectorType.FLOAT64 = 2 -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Schema.VectorField.VectorType.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorType +NRedisStack.Search.Scorer NRedisStack.Search.SearchResult NRedisStack.Search.SearchResult.Documents.get -> System.Collections.Generic.List! NRedisStack.Search.SearchResult.ToJson() -> System.Collections.Generic.List! NRedisStack.Search.SearchResult.TotalResults.get -> long +NRedisStack.Search.VectorData +NRedisStack.Search.VectorData +NRedisStack.Search.VectorSearchMethod NRedisStack.SearchCommandBuilder NRedisStack.SearchCommands NRedisStack.SearchCommands.Aggregate(string! index, NRedisStack.Search.AggregationRequest! query) -> NRedisStack.Search.AggregationResult! +NRedisStack.SearchCommands.AggregateEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IEnumerable! NRedisStack.SearchCommands.AliasAdd(string! alias, string! index) -> bool NRedisStack.SearchCommands.AliasDel(string! alias) -> bool NRedisStack.SearchCommands.AliasUpdate(string! alias, string! index) -> bool @@ -854,7 +1004,9 @@ NRedisStack.SearchCommands.ConfigGet(string! option) -> System.Collections.Gener NRedisStack.SearchCommands.ConfigSet(string! option, string! value) -> bool NRedisStack.SearchCommands.Create(string! indexName, NRedisStack.Search.FTCreateParams! parameters, NRedisStack.Search.Schema! schema) -> bool NRedisStack.SearchCommands.Create(string! indexName, NRedisStack.Search.Schema! schema) -> bool +NRedisStack.SearchCommands.CursorDel(NRedisStack.Search.AggregationResult! result) -> bool NRedisStack.SearchCommands.CursorDel(string! indexName, long cursorId) -> bool +NRedisStack.SearchCommands.CursorRead(NRedisStack.Search.AggregationResult! result, int? count = null) -> NRedisStack.Search.AggregationResult! NRedisStack.SearchCommands.CursorRead(string! indexName, long cursorId, int? count = null) -> NRedisStack.Search.AggregationResult! NRedisStack.SearchCommands.DictAdd(string! dict, params string![]! terms) -> long NRedisStack.SearchCommands.DictDel(string! dict, params string![]! terms) -> long @@ -862,6 +1014,7 @@ NRedisStack.SearchCommands.DictDump(string! dict) -> StackExchange.Redis.RedisRe NRedisStack.SearchCommands.DropIndex(string! indexName, bool dd = false) -> bool NRedisStack.SearchCommands.Explain(string! indexName, string! query, int? dialect = null) -> string! NRedisStack.SearchCommands.ExplainCli(string! indexName, string! query, int? dialect = null) -> StackExchange.Redis.RedisResult![]! +NRedisStack.SearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> NRedisStack.Search.HybridSearchResult! NRedisStack.SearchCommands.Info(StackExchange.Redis.RedisValue index) -> NRedisStack.Search.DataTypes.InfoResult! NRedisStack.SearchCommands.ProfileAggregate(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Tuple!>! NRedisStack.SearchCommands.ProfileOnAggregate(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Tuple! @@ -881,6 +1034,7 @@ NRedisStack.SearchCommands.TagVals(string! indexName, string! fieldName) -> Stac NRedisStack.SearchCommands._List() -> StackExchange.Redis.RedisResult![]! NRedisStack.SearchCommandsAsync NRedisStack.SearchCommandsAsync.AggregateAsync(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Threading.Tasks.Task! +NRedisStack.SearchCommandsAsync.AggregateAsyncEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IAsyncEnumerable! NRedisStack.SearchCommandsAsync.AliasAddAsync(string! alias, string! index) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.AliasDelAsync(string! alias) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.AliasUpdateAsync(string! alias, string! index) -> System.Threading.Tasks.Task! @@ -889,7 +1043,9 @@ NRedisStack.SearchCommandsAsync.ConfigGetAsync(string! option) -> System.Threadi NRedisStack.SearchCommandsAsync.ConfigSetAsync(string! option, string! value) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.CreateAsync(string! indexName, NRedisStack.Search.FTCreateParams! parameters, NRedisStack.Search.Schema! schema) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.CreateAsync(string! indexName, NRedisStack.Search.Schema! schema) -> System.Threading.Tasks.Task! +NRedisStack.SearchCommandsAsync.CursorDelAsync(NRedisStack.Search.AggregationResult! result) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.CursorDelAsync(string! indexName, long cursorId) -> System.Threading.Tasks.Task! +NRedisStack.SearchCommandsAsync.CursorReadAsync(NRedisStack.Search.AggregationResult! result, int? count = null) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.CursorReadAsync(string! indexName, long cursorId, int? count = null) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.defaultDialect -> int? NRedisStack.SearchCommandsAsync.DictAddAsync(string! dict, params string![]! terms) -> System.Threading.Tasks.Task! @@ -898,6 +1054,7 @@ NRedisStack.SearchCommandsAsync.DictDumpAsync(string! dict) -> System.Threading. NRedisStack.SearchCommandsAsync.DropIndexAsync(string! indexName, bool dd = false) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.ExplainAsync(string! indexName, string! query, int? dialect = null) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.ExplainCliAsync(string! indexName, string! query, int? dialect = null) -> System.Threading.Tasks.Task! +NRedisStack.SearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.InfoAsync(StackExchange.Redis.RedisValue index) -> System.Threading.Tasks.Task! NRedisStack.SearchCommandsAsync.ProfileAggregateAsync(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Threading.Tasks.Task!>!>! NRedisStack.SearchCommandsAsync.ProfileOnAggregateAsync(string! indexName, NRedisStack.Search.AggregationRequest! query, bool limited = false) -> System.Threading.Tasks.Task!>! @@ -1098,6 +1255,14 @@ override NRedisStack.DataTypes.TimeSeriesRule.GetHashCode() -> int override NRedisStack.DataTypes.TimeSeriesTuple.Equals(object? obj) -> bool override NRedisStack.DataTypes.TimeSeriesTuple.GetHashCode() -> int override NRedisStack.DataTypes.TimeStamp.GetHashCode() -> int +override NRedisStack.RedisStackCommands.SerializedCommand.ToString() -> string! +override NRedisStack.Search.ApplyExpression.Equals(object? obj) -> bool +override NRedisStack.Search.ApplyExpression.GetHashCode() -> int +override NRedisStack.Search.ApplyExpression.ToString() -> string! +override NRedisStack.Search.HybridSearchQuery.Combiner.ToString() -> string! +override NRedisStack.Search.Scorer.ToString() -> string! +override NRedisStack.Search.VectorData.ToString() -> string! +override NRedisStack.Search.VectorSearchMethod.ToString() -> string! static NRedisStack.Auxiliary.AssembleNonNullArguments(params object?[]! arguments) -> object![]! static NRedisStack.Auxiliary.Execute(this StackExchange.Redis.IDatabase! db, NRedisStack.RedisStackCommands.SerializedCommand! command) -> StackExchange.Redis.RedisResult! static NRedisStack.Auxiliary.ExecuteAsync(this StackExchange.Redis.IDatabaseAsync! db, NRedisStack.RedisStackCommands.SerializedCommand! command) -> System.Threading.Tasks.Task! @@ -1198,6 +1363,8 @@ static NRedisStack.DataTypes.TimeStamp.implicit operator NRedisStack.DataTypes.T static NRedisStack.DataTypes.TimeStamp.implicit operator NRedisStack.DataTypes.TimeStamp(System.DateTime dateTime) -> NRedisStack.DataTypes.TimeStamp static NRedisStack.DataTypes.TimeStamp.implicit operator string?(NRedisStack.DataTypes.TimeStamp ts) -> string? static NRedisStack.DataTypes.TimeStamp.implicit operator System.DateTime(NRedisStack.DataTypes.TimeStamp timeStamp) -> System.DateTime +static NRedisStack.DataTypes.TimeStamp.operator !=(NRedisStack.DataTypes.TimeStamp left, NRedisStack.DataTypes.TimeStamp right) -> bool +static NRedisStack.DataTypes.TimeStamp.operator ==(NRedisStack.DataTypes.TimeStamp left, NRedisStack.DataTypes.TimeStamp right) -> bool static NRedisStack.JsonCommandBuilder.ArrAppend(StackExchange.Redis.RedisKey key, string? path = null, params object![]! values) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.ArrIndex(StackExchange.Redis.RedisKey key, string! path, object! value, long? start = null, long? stop = null) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.ArrInsert(StackExchange.Redis.RedisKey key, string! path, long index, params object![]! values) -> NRedisStack.RedisStackCommands.SerializedCommand! @@ -1217,7 +1384,8 @@ static NRedisStack.JsonCommandBuilder.NumIncrby(StackExchange.Redis.RedisKey key static NRedisStack.JsonCommandBuilder.ObjKeys(StackExchange.Redis.RedisKey key, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.ObjLen(StackExchange.Redis.RedisKey key, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.Resp(StackExchange.Redis.RedisKey key, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! -static NRedisStack.JsonCommandBuilder.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when = StackExchange.Redis.When.Always) -> NRedisStack.RedisStackCommands.SerializedCommand! +static NRedisStack.JsonCommandBuilder.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) -> NRedisStack.RedisStackCommands.SerializedCommand! +static NRedisStack.JsonCommandBuilder.Set(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue path, StackExchange.Redis.RedisValue json, StackExchange.Redis.When when) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.StrAppend(StackExchange.Redis.RedisKey key, string! value, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.StrLen(StackExchange.Redis.RedisKey key, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.JsonCommandBuilder.Toggle(StackExchange.Redis.RedisKey key, string? path = null) -> NRedisStack.RedisStackCommands.SerializedCommand! @@ -1245,10 +1413,30 @@ static NRedisStack.Search.Aggregation.Reducers.Sum(string! field) -> NRedisStack static NRedisStack.Search.Aggregation.Reducers.ToList(string! field) -> NRedisStack.Search.Aggregation.Reducer! static NRedisStack.Search.Aggregation.SortedField.Asc(string! field) -> NRedisStack.Search.Aggregation.SortedField! static NRedisStack.Search.Aggregation.SortedField.Desc(string! field) -> NRedisStack.Search.Aggregation.SortedField! +static NRedisStack.Search.ApplyExpression.implicit operator NRedisStack.Search.ApplyExpression(string! expression) -> NRedisStack.Search.ApplyExpression static NRedisStack.Search.Document.Load(string! id, double score, byte[]? payload, StackExchange.Redis.RedisValue[]? fields) -> NRedisStack.Search.Document! static NRedisStack.Search.Document.Load(string! id, double score, byte[]? payload, StackExchange.Redis.RedisValue[]? fields, string![]? scoreExplained) -> NRedisStack.Search.Document! +static NRedisStack.Search.FieldName.implicit operator NRedisStack.Search.FieldName!(string! name) -> NRedisStack.Search.FieldName! static NRedisStack.Search.FieldName.Of(string! name) -> NRedisStack.Search.FieldName! static NRedisStack.Search.FTCreateParams.CreateParams() -> NRedisStack.Search.FTCreateParams! +static NRedisStack.Search.HybridSearchQuery.Combiner.Linear(double alpha = 0.3, double beta = 0.7, int? window = null) -> NRedisStack.Search.HybridSearchQuery.Combiner! +static NRedisStack.Search.HybridSearchQuery.Combiner.ReciprocalRankFusion(int? window = null, double? constant = null) -> NRedisStack.Search.HybridSearchQuery.Combiner! +static NRedisStack.Search.HybridSearchQuery.SearchConfig.implicit operator NRedisStack.Search.HybridSearchQuery.SearchConfig(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig +static NRedisStack.Search.Parameters.From(T obj) -> System.Collections.Generic.IReadOnlyDictionary! +static NRedisStack.Search.Scorer.BM25Std.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.BM25StdNorm.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.DisMax.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.DocScore.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.Hamming.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.TfIdf.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.Scorer.TfIdfDocNorm.get -> NRedisStack.Search.Scorer! +static NRedisStack.Search.VectorData.implicit operator NRedisStack.Search.VectorData!(string! name) -> NRedisStack.Search.VectorData! +static NRedisStack.Search.VectorData.Lease(int dimension) -> NRedisStack.Search.VectorData! +static NRedisStack.Search.VectorData.LeaseWithValues(params System.ReadOnlySpan values) -> NRedisStack.Search.VectorData! +static NRedisStack.Search.VectorData.Parameter(string! name) -> NRedisStack.Search.VectorData! +static NRedisStack.Search.VectorData.Raw(System.ReadOnlyMemory bytes) -> NRedisStack.Search.VectorData! +static NRedisStack.Search.VectorSearchMethod.NearestNeighbour(int count = 10, int? maxCandidates = null) -> NRedisStack.Search.VectorSearchMethod! +static NRedisStack.Search.VectorSearchMethod.Range(double radius, double? epsilon = null) -> NRedisStack.Search.VectorSearchMethod! static NRedisStack.SearchCommandBuilder.Aggregate(string! index, NRedisStack.Search.AggregationRequest! query) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.SearchCommandBuilder.AliasAdd(string! alias, string! index) -> NRedisStack.RedisStackCommands.SerializedCommand! static NRedisStack.SearchCommandBuilder.AliasDel(string! alias) -> NRedisStack.RedisStackCommands.SerializedCommand! @@ -1352,79 +1540,5 @@ static readonly NRedisStack.Search.Query.GeoFilter.METERS -> string! static readonly NRedisStack.Search.Query.GeoFilter.MILES -> string! virtual NRedisStack.Search.Aggregation.Reducer.AddOwnArgs(System.Collections.Generic.List! args) -> void virtual NRedisStack.Search.Aggregation.Reducer.GetOwnArgsCount() -> int -NRedisStack.Search.Schema.AddFlatVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! -NRedisStack.Search.Schema.AddHnswVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, int maxOutgoingConnections = 16, int maxConnectedNeighbors = 200, int maxTopCandidates = 10, double boundaryFactor = 0.01, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! -NRedisStack.Search.Schema.AddSvsVanamaVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm compressionAlgorithm = NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.NotSpecified, int constructionWindowSize = 200, int graphMaxDegree = 32, int searchWindowSize = 10, double rangeSearchApproximationFactor = 0.01, int trainingThreshold = 0, int reducedDimensions = 0, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> NRedisStack.Search.Schema! -NRedisStack.Search.Schema.FlatVectorField -NRedisStack.Search.Schema.FlatVectorField.FlatVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void -NRedisStack.Search.Schema.HnswVectorField -NRedisStack.Search.Schema.HnswVectorField.BoundaryFactor.get -> double -NRedisStack.Search.Schema.HnswVectorField.BoundaryFactor.set -> void -NRedisStack.Search.Schema.HnswVectorField.HnswVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void -NRedisStack.Search.Schema.HnswVectorField.MaxConnectedNeighbors.get -> int -NRedisStack.Search.Schema.HnswVectorField.MaxConnectedNeighbors.set -> void -NRedisStack.Search.Schema.HnswVectorField.MaxOutgoingConnections.get -> int -NRedisStack.Search.Schema.HnswVectorField.MaxOutgoingConnections.set -> void -NRedisStack.Search.Schema.HnswVectorField.MaxTopCandidates.get -> int -NRedisStack.Search.Schema.HnswVectorField.MaxTopCandidates.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField -NRedisStack.Search.Schema.SvsVanamaVectorField.CompressionAlgorithm.get -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.SvsVanamaVectorField.CompressionAlgorithm.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.ConstructionWindowSize.get -> int -NRedisStack.Search.Schema.SvsVanamaVectorField.ConstructionWindowSize.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.GraphMaxDegree.get -> int -NRedisStack.Search.Schema.SvsVanamaVectorField.GraphMaxDegree.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.RangeSearchApproximationFactor.get -> double -NRedisStack.Search.Schema.SvsVanamaVectorField.RangeSearchApproximationFactor.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.ReducedDimensions.get -> int -NRedisStack.Search.Schema.SvsVanamaVectorField.ReducedDimensions.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.SearchWindowSize.get -> int -NRedisStack.Search.Schema.SvsVanamaVectorField.SearchWindowSize.set -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.SvsVanamaVectorField(NRedisStack.Search.FieldName! name, NRedisStack.Search.Schema.VectorField.VectorType type, int dimensions, NRedisStack.Search.Schema.VectorField.VectorDistanceMetric distanceMetric, System.Collections.Generic.Dictionary? attributes = null, bool missingIndex = false) -> void -NRedisStack.Search.Schema.SvsVanamaVectorField.TrainingThreshold.get -> int -NRedisStack.Search.Schema.SvsVanamaVectorField.TrainingThreshold.set -> void -NRedisStack.Search.Schema.VectorField.Dimensions.get -> int -NRedisStack.Search.Schema.VectorField.Dimensions.set -> void -NRedisStack.Search.Schema.VectorField.DistanceMetric.get -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.DistanceMetric.set -> void -NRedisStack.Search.Schema.VectorField.Type.get -> NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.Type.set -> void -NRedisStack.Search.Schema.VectorField.VectorAlgo.SVS_VAMANA = 2 -> NRedisStack.Search.Schema.VectorField.VectorAlgo -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LeanVec4x8 = 5 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LeanVec8x8 = 6 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4 = 2 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4x4 = 3 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ4x8 = 4 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.LVQ8 = 1 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorCompressionAlgorithm -NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.CosineDistance = 3 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.EuclideanDistance = 1 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.InnerProduct = 2 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.VectorDistanceMetric.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorDistanceMetric -NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.VectorType.BFLOAT16 = 3 -> NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.VectorType.FLOAT16 = 4 -> NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.VectorType.FLOAT32 = 1 -> NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.VectorType.FLOAT64 = 2 -> NRedisStack.Search.Schema.VectorField.VectorType -NRedisStack.Search.Schema.VectorField.VectorType.NotSpecified = 0 -> NRedisStack.Search.Schema.VectorField.VectorType -override NRedisStack.RedisStackCommands.SerializedCommand.ToString() -> string! -static NRedisStack.Search.FieldName.implicit operator NRedisStack.Search.FieldName!(string! name) -> NRedisStack.Search.FieldName! -~override NRedisStack.DataTypes.TimeStamp.ToString() -> string ~override NRedisStack.DataTypes.TimeStamp.Equals(object obj) -> bool -NRedisStack.DataTypes.TimeStamp.Equals(NRedisStack.DataTypes.TimeStamp other) -> bool -static NRedisStack.DataTypes.TimeStamp.operator ==(NRedisStack.DataTypes.TimeStamp left, NRedisStack.DataTypes.TimeStamp right) -> bool -static NRedisStack.DataTypes.TimeStamp.operator !=(NRedisStack.DataTypes.TimeStamp left, NRedisStack.DataTypes.TimeStamp right) -> bool -NRedisStack.ISearchCommands.AggregateEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IEnumerable! -NRedisStack.ISearchCommands.CursorDel(NRedisStack.Search.AggregationResult! result) -> bool -NRedisStack.ISearchCommands.CursorRead(NRedisStack.Search.AggregationResult! result, int? count = null) -> NRedisStack.Search.AggregationResult! -NRedisStack.ISearchCommandsAsync.AggregateAsyncEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IAsyncEnumerable! -NRedisStack.ISearchCommandsAsync.CursorDelAsync(NRedisStack.Search.AggregationResult! result) -> System.Threading.Tasks.Task! -NRedisStack.ISearchCommandsAsync.CursorReadAsync(NRedisStack.Search.AggregationResult! result, int? count = null) -> System.Threading.Tasks.Task! -NRedisStack.SearchCommands.AggregateEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IEnumerable! -NRedisStack.SearchCommands.CursorDel(NRedisStack.Search.AggregationResult! result) -> bool -NRedisStack.SearchCommands.CursorRead(NRedisStack.Search.AggregationResult! result, int? count = null) -> NRedisStack.Search.AggregationResult! -NRedisStack.SearchCommandsAsync.AggregateAsyncEnumerable(string! index, NRedisStack.Search.AggregationRequest! query) -> System.Collections.Generic.IAsyncEnumerable! -NRedisStack.SearchCommandsAsync.CursorDelAsync(NRedisStack.Search.AggregationResult! result) -> System.Threading.Tasks.Task! -NRedisStack.SearchCommandsAsync.CursorReadAsync(NRedisStack.Search.AggregationResult! result, int? count = null) -> System.Threading.Tasks.Task! +~override NRedisStack.DataTypes.TimeStamp.ToString() -> string diff --git a/src/NRedisStack/PublicAPI/PublicAPI.Unshipped.txt b/src/NRedisStack/PublicAPI/PublicAPI.Unshipped.txt index 4b6d98dd..7dc5c581 100644 --- a/src/NRedisStack/PublicAPI/PublicAPI.Unshipped.txt +++ b/src/NRedisStack/PublicAPI/PublicAPI.Unshipped.txt @@ -1,103 +1 @@ -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.GetEnumerator() -> NRedisStack.Search.Aggregation.Row.Enumerator -NRedisStack.Search.Parameters -static NRedisStack.Search.Parameters.From(T obj) -> System.Collections.Generic.IReadOnlyDictionary! -[NRS001]abstract NRedisStack.Search.VectorData.AsRedisValue() -> StackExchange.Redis.RedisValue -[NRS001]abstract NRedisStack.Search.VectorData.Dispose() -> void -[NRS001]abstract NRedisStack.Search.VectorData.Span.get -> System.Span -[NRS001]const NRedisStack.Search.HybridSearchQuery.Fields.Key = "@__key" -> string! -[NRS001]const NRedisStack.Search.HybridSearchQuery.Fields.Score = "@__score" -> string! -[NRS001]NRedisStack.ISearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> NRedisStack.Search.HybridSearchResult! -[NRS001]NRedisStack.ISearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> System.Threading.Tasks.Task! -[NRS001]NRedisStack.Search.ApplyExpression -[NRS001]NRedisStack.Search.ApplyExpression.Alias.get -> string? -[NRS001]NRedisStack.Search.ApplyExpression.ApplyExpression() -> void -[NRS001]NRedisStack.Search.ApplyExpression.ApplyExpression(string! expression, string? alias = null) -> void -[NRS001]NRedisStack.Search.ApplyExpression.Expression.get -> string! -[NRS001]NRedisStack.Search.HybridSearchQuery -[NRS001]NRedisStack.Search.HybridSearchQuery.AllowModification() -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Apply(NRedisStack.Search.ApplyExpression applyExpression) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Apply(params NRedisStack.Search.ApplyExpression[]! applyExpression) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Combine(NRedisStack.Search.HybridSearchQuery.Combiner! combiner) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Combiner -[NRS001]NRedisStack.Search.HybridSearchQuery.Combiner.Combiner() -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.Fields -[NRS001]NRedisStack.Search.HybridSearchQuery.Filter(string! expression) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(string! field) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.HybridSearchQuery() -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.Limit(int offset, int count) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.NoSort() -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(NRedisStack.Search.Aggregation.Reducer! reducer) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(params NRedisStack.Search.Aggregation.Reducer![]! reducers) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(string! field) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Search(NRedisStack.Search.HybridSearchQuery.SearchConfig query) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.Query.get -> string! -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.ScoreAlias.get -> string? -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.Scorer.get -> NRedisStack.Search.Scorer? -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig() -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig(string! query, NRedisStack.Search.Scorer? scorer = null, string? scoreAlias = null) -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithQuery(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScoreAlias(string? alias) -> NRedisStack.Search.HybridSearchQuery.SearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScorer(NRedisStack.Search.Scorer? scorer) -> NRedisStack.Search.HybridSearchQuery.SearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(NRedisStack.Search.Aggregation.SortedField! field) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(params NRedisStack.Search.Aggregation.SortedField![]! fields) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(string! field) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.Timeout(System.TimeSpan timeout) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearch(NRedisStack.Search.HybridSearchQuery.VectorSearchConfig config) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearch(string! fieldName, NRedisStack.Search.VectorData! vectorData) -> NRedisStack.Search.HybridSearchQuery! -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.FieldName.get -> string! -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Filter.get -> string? -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Method.get -> NRedisStack.Search.VectorSearchMethod? -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.ScoreAlias.get -> string? -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorData.get -> NRedisStack.Search.VectorData? -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig() -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig(string! fieldName, NRedisStack.Search.VectorData! vectorData, NRedisStack.Search.VectorSearchMethod? method = null, string? filter = null, string? scoreAlias = null) -> void -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFieldName(string! fieldName) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFilter(string? filter) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithMethod(NRedisStack.Search.VectorSearchMethod? method) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithScoreAlias(string? scoreAlias) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithVectorData(NRedisStack.Search.VectorData! vectorData) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig -[NRS001]NRedisStack.Search.HybridSearchResult -[NRS001]NRedisStack.Search.HybridSearchResult.ExecutionTime.get -> System.TimeSpan -[NRS001]NRedisStack.Search.HybridSearchResult.Results.get -> NRedisStack.Search.Document![]! -[NRS001]NRedisStack.Search.HybridSearchResult.TotalResults.get -> long -[NRS001]NRedisStack.Search.Scorer -[NRS001]NRedisStack.Search.VectorData -[NRS001]NRedisStack.Search.VectorData -[NRS001]NRedisStack.Search.VectorSearchMethod -[NRS001]NRedisStack.SearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> NRedisStack.Search.HybridSearchResult! -[NRS001]NRedisStack.SearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary? parameters = null) -> System.Threading.Tasks.Task! -[NRS001]override NRedisStack.Search.ApplyExpression.Equals(object? obj) -> bool -[NRS001]override NRedisStack.Search.ApplyExpression.GetHashCode() -> int -[NRS001]override NRedisStack.Search.ApplyExpression.ToString() -> string! -[NRS001]override NRedisStack.Search.HybridSearchQuery.Combiner.ToString() -> string! -[NRS001]override NRedisStack.Search.Scorer.ToString() -> string! -[NRS001]override NRedisStack.Search.VectorData.ToString() -> string! -[NRS001]override NRedisStack.Search.VectorSearchMethod.ToString() -> string! -[NRS001]static NRedisStack.Search.ApplyExpression.implicit operator NRedisStack.Search.ApplyExpression(string! expression) -> NRedisStack.Search.ApplyExpression -[NRS001]static NRedisStack.Search.HybridSearchQuery.Combiner.Linear(double alpha = 0.3, double beta = 0.7, int? window = null) -> NRedisStack.Search.HybridSearchQuery.Combiner! -[NRS001]static NRedisStack.Search.HybridSearchQuery.Combiner.ReciprocalRankFusion(int? window = null, double? constant = null) -> NRedisStack.Search.HybridSearchQuery.Combiner! -[NRS001]static NRedisStack.Search.HybridSearchQuery.SearchConfig.implicit operator NRedisStack.Search.HybridSearchQuery.SearchConfig(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig -[NRS001]static NRedisStack.Search.Scorer.BM25Std.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.BM25StdNorm.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.DisMax.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.DocScore.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.Hamming.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.TfIdf.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.Scorer.TfIdfDocNorm.get -> NRedisStack.Search.Scorer! -[NRS001]static NRedisStack.Search.VectorData.implicit operator NRedisStack.Search.VectorData!(string! name) -> NRedisStack.Search.VectorData! -[NRS001]static NRedisStack.Search.VectorData.Lease(int dimension) -> NRedisStack.Search.VectorData! -[NRS001]static NRedisStack.Search.VectorData.LeaseWithValues(params System.ReadOnlySpan values) -> NRedisStack.Search.VectorData! -[NRS001]static NRedisStack.Search.VectorData.Parameter(string! name) -> NRedisStack.Search.VectorData! -[NRS001]static NRedisStack.Search.VectorData.Raw(System.ReadOnlyMemory bytes) -> NRedisStack.Search.VectorData! -[NRS001]static NRedisStack.Search.VectorSearchMethod.NearestNeighbour(int count = 10, int? maxCandidates = null) -> NRedisStack.Search.VectorSearchMethod! -[NRS001]static NRedisStack.Search.VectorSearchMethod.Range(double radius, double? epsilon = null) -> NRedisStack.Search.VectorSearchMethod! \ No newline at end of file +#nullable enable diff --git a/src/NRedisStack/Search/ApplyExpression.cs b/src/NRedisStack/Search/ApplyExpression.cs index a2fd7361..c218916f 100644 --- a/src/NRedisStack/Search/ApplyExpression.cs +++ b/src/NRedisStack/Search/ApplyExpression.cs @@ -7,7 +7,6 @@ namespace NRedisStack.Search; /// /// The expression to apply. /// The alias for the expression in the results. -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public readonly struct ApplyExpression(string expression, string? alias = null) { public string Expression { get; } = expression; diff --git a/src/NRedisStack/Search/HybridSearchQuery.cs b/src/NRedisStack/Search/HybridSearchQuery.cs index 5ec60149..f01c6178 100644 --- a/src/NRedisStack/Search/HybridSearchQuery.cs +++ b/src/NRedisStack/Search/HybridSearchQuery.cs @@ -10,7 +10,6 @@ namespace NRedisStack.Search; /// /// This type is not thread safe, and cannot safely be mutated concurrently by multiple threads. However, once composed: a single instance /// can be *used* by multiple threads as a template, providing different parameter values to each invocation. -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public sealed partial class HybridSearchQuery { /// diff --git a/src/NRedisStack/Search/HybridSearchResult.cs b/src/NRedisStack/Search/HybridSearchResult.cs index de17aecb..f2dab59f 100644 --- a/src/NRedisStack/Search/HybridSearchResult.cs +++ b/src/NRedisStack/Search/HybridSearchResult.cs @@ -3,7 +3,6 @@ namespace NRedisStack.Search; -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public sealed class HybridSearchResult { private HybridSearchResult() { } diff --git a/src/NRedisStack/Search/ISearchCommands.cs b/src/NRedisStack/Search/ISearchCommands.cs index 07670cda..bc90e6a4 100644 --- a/src/NRedisStack/Search/ISearchCommands.cs +++ b/src/NRedisStack/Search/ISearchCommands.cs @@ -354,6 +354,5 @@ public interface ISearchCommands /// The optional parameters used in this query. /// List of TAG field values /// - [Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] HybridSearchResult HybridSearch(string indexName, HybridSearchQuery query, IReadOnlyDictionary? parameters = null); } \ No newline at end of file diff --git a/src/NRedisStack/Search/ISearchCommandsAsync.cs b/src/NRedisStack/Search/ISearchCommandsAsync.cs index b0b516c0..74b0aa19 100644 --- a/src/NRedisStack/Search/ISearchCommandsAsync.cs +++ b/src/NRedisStack/Search/ISearchCommandsAsync.cs @@ -349,6 +349,5 @@ public interface ISearchCommandsAsync Task TagValsAsync(string indexName, string fieldName); /// - [Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] Task HybridSearchAsync(string indexName, HybridSearchQuery query, IReadOnlyDictionary? parameters = null); } \ No newline at end of file diff --git a/src/NRedisStack/Search/Scorer.cs b/src/NRedisStack/Search/Scorer.cs index 3855a669..c52653ac 100644 --- a/src/NRedisStack/Search/Scorer.cs +++ b/src/NRedisStack/Search/Scorer.cs @@ -5,7 +5,6 @@ namespace NRedisStack.Search; /// /// See https://redis.io/docs/latest/develop/ai/search-and-query/advanced-concepts/scoring/ for more details /// -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public abstract class Scorer { private protected Scorer() diff --git a/src/NRedisStack/Search/SearchCommands.cs b/src/NRedisStack/Search/SearchCommands.cs index 6c0b5ca0..ae72de9a 100644 --- a/src/NRedisStack/Search/SearchCommands.cs +++ b/src/NRedisStack/Search/SearchCommands.cs @@ -317,7 +317,6 @@ public bool SynUpdate(string indexName, string synonymGroupId, bool skipInitialS /// - [Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public HybridSearchResult HybridSearch(string indexName, HybridSearchQuery query, IReadOnlyDictionary? parameters = null) { query.Validate(); diff --git a/src/NRedisStack/Search/SearchCommandsAsync.cs b/src/NRedisStack/Search/SearchCommandsAsync.cs index ab557252..32574d04 100644 --- a/src/NRedisStack/Search/SearchCommandsAsync.cs +++ b/src/NRedisStack/Search/SearchCommandsAsync.cs @@ -355,7 +355,6 @@ public async Task SynUpdateAsync(string indexName, string synonymGroupId, (await _db.ExecuteAsync(SearchCommandBuilder.TagVals(indexName, fieldName))).ToArray(); /// - [Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public async Task HybridSearchAsync(string indexName, HybridSearchQuery query, IReadOnlyDictionary? parameters = null) { query.Validate(); diff --git a/src/NRedisStack/Search/VectorData.cs b/src/NRedisStack/Search/VectorData.cs index 4dff49de..8560a315 100644 --- a/src/NRedisStack/Search/VectorData.cs +++ b/src/NRedisStack/Search/VectorData.cs @@ -6,7 +6,6 @@ namespace NRedisStack.Search; -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public abstract class VectorData : VectorData, IDisposable where T : unmanaged { private protected VectorData() @@ -36,7 +35,6 @@ public override void Dispose() public abstract void Dispose(); } -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public abstract class VectorData { /// diff --git a/src/NRedisStack/Search/VectorSearchMethod.cs b/src/NRedisStack/Search/VectorSearchMethod.cs index 9b52d9c7..b5565cc8 100644 --- a/src/NRedisStack/Search/VectorSearchMethod.cs +++ b/src/NRedisStack/Search/VectorSearchMethod.cs @@ -2,7 +2,6 @@ namespace NRedisStack.Search; -[Experimental(Experiments.Server_8_4, UrlFormat = Experiments.UrlFormat)] public abstract class VectorSearchMethod { private protected VectorSearchMethod() diff --git a/tests/NRedisStack.Tests/Json/JsonTests.cs b/tests/NRedisStack.Tests/Json/JsonTests.cs index d8f19c55..80efe952 100644 --- a/tests/NRedisStack.Tests/Json/JsonTests.cs +++ b/tests/NRedisStack.Tests/Json/JsonTests.cs @@ -1,9 +1,17 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; using System.Text.Json; using System.Text.Json.Nodes; +using System.Text.Json.Serialization.Metadata; +using System.Threading.Tasks; using Xunit; using StackExchange.Redis; using NRedisStack.RedisStackCommands; using NRedisStack.Json.DataTypes; +using NRedisStack.Tests.Search; +using Xunit.Sdk; namespace NRedisStack.Tests; @@ -119,6 +127,43 @@ public async Task TestJsonSetNotExistAsync(string endpointId) Assert.True(await commands.SetAsync("Person:Shachar", "$", obj, When.Exists)); } + public static IEnumerable FphaTestData() + => HybridSearchIntegrationTests.CrossJoin(EndpointsFixture.Env.AllEnvironments); + + [Theory] + [MemberData(nameof(FphaTestData))] + public void TestJsonSetFpha(string endpointId, JsonNumericArrayStorage fpha) + { + Assert.SkipUnless(fpha is JsonNumericArrayStorage.NotSpecified || EndpointsFixture.IsAtLeast(8, 8), "FPHA is not supported"); + var db = GetCleanDatabase(endpointId); + + double[] original = [1.0, 2.0, 3.0]; + var obj = new { numbers = original }; + Assert.True(db.JSON().Set("obj", "$", obj, fpha: fpha)); + var actual = (string)db.JSON().Get("obj")!; + + var numbers = TemplatedDeserialize(obj, actual)?.numbers; + Assert.Equal(original, numbers); + } + + [Theory] + [MemberData(nameof(FphaTestData))] + public async Task TestJsonSetFphaAsync(string endpointId, JsonNumericArrayStorage fpha) + { + Assert.SkipUnless(fpha is JsonNumericArrayStorage.NotSpecified || EndpointsFixture.IsAtLeast(8, 8), "FPHA is not supported"); + var db = GetCleanDatabase(endpointId); + + double[] original = [1.0, 2.0, 3.0]; + var obj = new { numbers = original }; + Assert.True(await db.JSON().SetAsync("obj", "$", obj, fpha: fpha)); + var actual = (string)(await db.JSON().GetAsync("obj"))!; + + var numbers = TemplatedDeserialize(obj, actual)?.numbers; + Assert.Equal(original, numbers); + } + + private static T? TemplatedDeserialize(T template, string json) => JsonSerializer.Deserialize(json); + [Fact] public void TestModulePrefixs() { diff --git a/tests/NRedisStack.Tests/Search/HybridSearchIntegrationTests.cs b/tests/NRedisStack.Tests/Search/HybridSearchIntegrationTests.cs index 77aa65ad..f9bfe29b 100644 --- a/tests/NRedisStack.Tests/Search/HybridSearchIntegrationTests.cs +++ b/tests/NRedisStack.Tests/Search/HybridSearchIntegrationTests.cs @@ -204,7 +204,7 @@ where val is not null } - private static IEnumerable CrossJoin(Func> environments) + internal static IEnumerable CrossJoin(Func> environments) where T : unmanaged, Enum { foreach (var arr in environments())