Skip to content

Commit c736263

Browse files
committed
refactor API and deal with missing server features
1 parent 6141c16 commit c736263

File tree

9 files changed

+341
-320
lines changed

9 files changed

+341
-320
lines changed

src/NRedisStack/PublicAPI/PublicAPI.Unshipped.txt

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,72 @@ override NRedisStack.Search.ApplyExpression.ToString() -> string!
99
static NRedisStack.Search.ApplyExpression.implicit operator NRedisStack.Search.ApplyExpression(string! expression) -> NRedisStack.Search.ApplyExpression
1010
[NRS001]NRedisStack.ISearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary<string!, object!>? parameters = null) -> NRedisStack.Search.HybridSearchResult!
1111
[NRS001]NRedisStack.ISearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary<string!, object!>? parameters = null) -> System.Threading.Tasks.Task<NRedisStack.Search.HybridSearchResult!>!
12+
[NRS001]NRedisStack.Search.HybridSearchQuery
1213
[NRS001]NRedisStack.Search.HybridSearchQuery.Apply(NRedisStack.Search.ApplyExpression applyExpression) -> NRedisStack.Search.HybridSearchQuery!
1314
[NRS001]NRedisStack.Search.HybridSearchQuery.Apply(params NRedisStack.Search.ApplyExpression[]! applyExpression) -> NRedisStack.Search.HybridSearchQuery!
14-
[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery!
15-
[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(string! field) -> NRedisStack.Search.HybridSearchQuery!
16-
[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(NRedisStack.Search.Aggregation.Reducer! reducer) -> NRedisStack.Search.HybridSearchQuery!
17-
[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(params NRedisStack.Search.Aggregation.Reducer![]! reducers) -> NRedisStack.Search.HybridSearchQuery!
18-
[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery!
19-
[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(string! field) -> NRedisStack.Search.HybridSearchQuery!
20-
[NRS001]NRedisStack.Search.HybridSearchResult
21-
[NRS001]NRedisStack.Search.HybridSearchResult.ExecutionTime.get -> System.TimeSpan
22-
[NRS001]NRedisStack.Search.HybridSearchResult.Results.get -> System.Collections.Generic.IReadOnlyDictionary<string!, object!>![]!
23-
[NRS001]NRedisStack.Search.HybridSearchResult.TotalResults.get -> long
24-
[NRS001]NRedisStack.Search.HybridSearchResult.Warnings.get -> string![]!
25-
[NRS001]NRedisStack.Search.Scorer
26-
[NRS001]NRedisStack.Search.HybridSearchQuery
2715
[NRS001]NRedisStack.Search.HybridSearchQuery.Combine(NRedisStack.Search.HybridSearchQuery.Combiner! combiner, string? scoreAlias = null) -> NRedisStack.Search.HybridSearchQuery!
2816
[NRS001]NRedisStack.Search.HybridSearchQuery.Combiner
2917
[NRS001]NRedisStack.Search.HybridSearchQuery.Combiner.Combiner() -> void
3018
[NRS001]NRedisStack.Search.HybridSearchQuery.ExplainScore(bool explainScore = true) -> NRedisStack.Search.HybridSearchQuery!
3119
[NRS001]NRedisStack.Search.HybridSearchQuery.Filter(string! expression) -> NRedisStack.Search.HybridSearchQuery!
20+
[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery!
21+
[NRS001]NRedisStack.Search.HybridSearchQuery.GroupBy(string! field) -> NRedisStack.Search.HybridSearchQuery!
3222
[NRS001]NRedisStack.Search.HybridSearchQuery.HybridSearchQuery() -> void
33-
[NRS001]NRedisStack.Search.HybridSearchQuery.Language(string! language) -> NRedisStack.Search.HybridSearchQuery!
3423
[NRS001]NRedisStack.Search.HybridSearchQuery.Limit(int offset, int count) -> NRedisStack.Search.HybridSearchQuery!
35-
[NRS001]NRedisStack.Search.HybridSearchQuery.QueryConfig
36-
[NRS001]NRedisStack.Search.HybridSearchQuery.QueryConfig.QueryConfig() -> void
37-
[NRS001]NRedisStack.Search.HybridSearchQuery.QueryConfig.ScoreAlias(string! scoreAlias) -> NRedisStack.Search.HybridSearchQuery.QueryConfig!
38-
[NRS001]NRedisStack.Search.HybridSearchQuery.QueryConfig.Scorer(NRedisStack.Search.Scorer! scorer) -> NRedisStack.Search.HybridSearchQuery.QueryConfig!
39-
[NRS001]NRedisStack.Search.HybridSearchQuery.ReRank(int top, string! expression) -> NRedisStack.Search.HybridSearchQuery!
40-
[NRS001]NRedisStack.Search.HybridSearchQuery.Search(string! query, NRedisStack.Search.HybridSearchQuery.QueryConfig? config = null) -> NRedisStack.Search.HybridSearchQuery!
24+
[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(NRedisStack.Search.Aggregation.Reducer! reducer) -> NRedisStack.Search.HybridSearchQuery!
25+
[NRS001]NRedisStack.Search.HybridSearchQuery.Reduce(params NRedisStack.Search.Aggregation.Reducer![]! reducers) -> NRedisStack.Search.HybridSearchQuery!
26+
[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery!
27+
[NRS001]NRedisStack.Search.HybridSearchQuery.ReturnFields(string! field) -> NRedisStack.Search.HybridSearchQuery!
28+
[NRS001]NRedisStack.Search.HybridSearchQuery.Search(NRedisStack.Search.HybridSearchQuery.SearchConfig query) -> NRedisStack.Search.HybridSearchQuery!
29+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig
30+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.Query.get -> string!
31+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.ScoreAlias.get -> string?
32+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.Scorer.get -> NRedisStack.Search.Scorer?
33+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig() -> void
34+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.SearchConfig(string! query, NRedisStack.Search.Scorer? scorer = null, string? scoreAlias = null) -> void
35+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithQuery(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig
36+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScoreAlias(string? alias) -> NRedisStack.Search.HybridSearchQuery.SearchConfig
37+
[NRS001]NRedisStack.Search.HybridSearchQuery.SearchConfig.WithScorer(NRedisStack.Search.Scorer? scorer) -> NRedisStack.Search.HybridSearchQuery.SearchConfig
4138
[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(NRedisStack.Search.Aggregation.SortedField! field) -> NRedisStack.Search.HybridSearchQuery!
4239
[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(params NRedisStack.Search.Aggregation.SortedField![]! fields) -> NRedisStack.Search.HybridSearchQuery!
4340
[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(params string![]! fields) -> NRedisStack.Search.HybridSearchQuery!
4441
[NRS001]NRedisStack.Search.HybridSearchQuery.SortBy(string! field) -> NRedisStack.Search.HybridSearchQuery!
4542
[NRS001]NRedisStack.Search.HybridSearchQuery.Timeout(bool timeout = true) -> NRedisStack.Search.HybridSearchQuery!
43+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorData
44+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorData.VectorData() -> void
45+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearch(NRedisStack.Search.HybridSearchQuery.VectorSearchConfig config) -> NRedisStack.Search.HybridSearchQuery!
46+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearch(string! fieldName, NRedisStack.Search.HybridSearchQuery.VectorData vectorData) -> NRedisStack.Search.HybridSearchQuery!
4647
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
47-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Filter(string! filter, NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy? policy = null, int? batchSize = null) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig!
48-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Method(NRedisStack.Search.HybridSearchQuery.VectorSearchMethod! method) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig!
49-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.ScoreAlias(string! scoreAlias) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig!
50-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy
51-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy.Acorn = 2 -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy
52-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy.AdHoc = 0 -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy
53-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy.Batches = 1 -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorFilterPolicy
48+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.FieldName.get -> string!
49+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Filter.get -> string?
50+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.Method.get -> NRedisStack.Search.HybridSearchQuery.VectorSearchMethod?
51+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.ScoreAlias.get -> string?
52+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorData.get -> NRedisStack.Search.HybridSearchQuery.VectorData
5453
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig() -> void
54+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.VectorSearchConfig(string! fieldName, NRedisStack.Search.HybridSearchQuery.VectorData vectorData, NRedisStack.Search.HybridSearchQuery.VectorSearchMethod? method = null, string? filter = null, string? scoreAlias = null) -> void
55+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFieldName(string! fieldName) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
56+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithFilter(string? filter) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
57+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithMethod(NRedisStack.Search.HybridSearchQuery.VectorSearchMethod? method) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
58+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithScoreAlias(string? scoreAlias) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
59+
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchConfig.WithVectorData(NRedisStack.Search.HybridSearchQuery.VectorData vectorData) -> NRedisStack.Search.HybridSearchQuery.VectorSearchConfig
5560
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSearchMethod
56-
[NRS001]NRedisStack.Search.HybridSearchQuery.VectorSimilaritySearch(string! field, System.ReadOnlyMemory<byte> data, NRedisStack.Search.HybridSearchQuery.VectorSearchConfig? config = null) -> NRedisStack.Search.HybridSearchQuery!
5761
[NRS001]NRedisStack.Search.HybridSearchQuery.WithCursor(int count = 0, System.TimeSpan maxIdle = default(System.TimeSpan)) -> NRedisStack.Search.HybridSearchQuery!
62+
[NRS001]NRedisStack.Search.HybridSearchResult
63+
[NRS001]NRedisStack.Search.HybridSearchResult.ExecutionTime.get -> System.TimeSpan
64+
[NRS001]NRedisStack.Search.HybridSearchResult.Results.get -> System.Collections.Generic.IReadOnlyDictionary<string!, object!>![]!
65+
[NRS001]NRedisStack.Search.HybridSearchResult.TotalResults.get -> long
66+
[NRS001]NRedisStack.Search.HybridSearchResult.Warnings.get -> string![]!
67+
[NRS001]NRedisStack.Search.Scorer
5868
[NRS001]NRedisStack.SearchCommands.HybridSearch(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary<string!, object!>? parameters = null) -> NRedisStack.Search.HybridSearchResult!
5969
[NRS001]NRedisStack.SearchCommandsAsync.HybridSearchAsync(string! indexName, NRedisStack.Search.HybridSearchQuery! query, System.Collections.Generic.IReadOnlyDictionary<string!, object!>? parameters = null) -> System.Threading.Tasks.Task<NRedisStack.Search.HybridSearchResult!>!
6070
[NRS001]override NRedisStack.Search.HybridSearchQuery.Combiner.ToString() -> string!
6171
[NRS001]override NRedisStack.Search.HybridSearchQuery.VectorSearchMethod.ToString() -> string!
6272
[NRS001]override NRedisStack.Search.Scorer.ToString() -> string!
6373
[NRS001]static NRedisStack.Search.HybridSearchQuery.Combiner.Linear(double alpha = 0.3, double beta = 0.7) -> NRedisStack.Search.HybridSearchQuery.Combiner!
6474
[NRS001]static NRedisStack.Search.HybridSearchQuery.Combiner.ReciprocalRankFusion(int? window = null, double? constant = null) -> NRedisStack.Search.HybridSearchQuery.Combiner!
75+
[NRS001]static NRedisStack.Search.HybridSearchQuery.SearchConfig.implicit operator NRedisStack.Search.HybridSearchQuery.SearchConfig(string! query) -> NRedisStack.Search.HybridSearchQuery.SearchConfig
76+
[NRS001]static NRedisStack.Search.HybridSearchQuery.VectorData.implicit operator NRedisStack.Search.HybridSearchQuery.VectorData(byte[]! data) -> NRedisStack.Search.HybridSearchQuery.VectorData
77+
[NRS001]static NRedisStack.Search.HybridSearchQuery.VectorData.implicit operator NRedisStack.Search.HybridSearchQuery.VectorData(System.ReadOnlyMemory<byte> data) -> NRedisStack.Search.HybridSearchQuery.VectorData
6578
[NRS001]static NRedisStack.Search.HybridSearchQuery.VectorSearchMethod.NearestNeighbour(int count = 10, int? maxTopCandidates = null, string? distanceAlias = null) -> NRedisStack.Search.HybridSearchQuery.VectorSearchMethod!
6679
[NRS001]static NRedisStack.Search.HybridSearchQuery.VectorSearchMethod.Range(double radius, double? epsilon = null, string? distanceAlias = null) -> NRedisStack.Search.HybridSearchQuery.VectorSearchMethod!
6780
[NRS001]static NRedisStack.Search.Scorer.BM25Std.get -> NRedisStack.Search.Scorer!

src/NRedisStack/Search/HybridSearchQuery.Command.cs

Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public sealed partial class HybridSearchQuery
1010
{
1111
internal string Command => "FT.HYBRID";
1212

13-
internal ICollection<object> GetArgs(in RedisKey index, IReadOnlyDictionary<string, object>? parameters)
13+
internal ICollection<object> GetArgs(string index, IReadOnlyDictionary<string, object>? parameters)
1414
{
1515
var count = GetOwnArgsCount(parameters);
1616
var args = new List<object>(count + 1);
@@ -23,16 +23,8 @@ internal ICollection<object> GetArgs(in RedisKey index, IReadOnlyDictionary<stri
2323

2424
internal int GetOwnArgsCount(IReadOnlyDictionary<string, object>? parameters)
2525
{
26-
int count = 0; // note index is not included here
27-
if (_query is not null)
28-
{
29-
count += 2 + (_queryConfig?.GetOwnArgsCount() ?? 0);
30-
}
31-
32-
if (_vectorField is not null)
33-
{
34-
count += 3 + (_vectorConfig?.GetOwnArgsCount() ?? 0);
35-
}
26+
int count = _search.GetOwnArgsCount() + _vsim.GetOwnArgsCount(); // note index is not included here
27+
3628

3729
if (_combiner is not null)
3830
{
@@ -77,7 +69,7 @@ internal int GetOwnArgsCount(IReadOnlyDictionary<string, object>? parameters)
7769
static int CountReducer(Reducer reducer) => 3 + reducer.ArgCount() + (reducer.Alias is null ? 0 : 2);
7870
}
7971

80-
switch (_applyExpression)
72+
switch (_applyExpressionOrExpressions)
8173
{
8274
case string expression:
8375
count += CountApply(new ApplyExpression(expression));
@@ -145,36 +137,8 @@ internal int GetOwnArgsCount(IReadOnlyDictionary<string, object>? parameters)
145137

146138
internal void AddOwnArgs(List<object> args, IReadOnlyDictionary<string, object>? parameters)
147139
{
148-
if (_query is not null)
149-
{
150-
args.Add("SEARCH");
151-
args.Add(_query);
152-
_queryConfig?.AddOwnArgs(args);
153-
}
154-
155-
if (_vectorField is not null)
156-
{
157-
args.Add("VSIM");
158-
args.Add(_vectorField);
159-
#if NET || NETSTANDARD2_1_OR_GREATER
160-
args.Add(Convert.ToBase64String(_vectorData.Span));
161-
#else
162-
if (MemoryMarshal.TryGetArray(_vectorData, out ArraySegment<byte> segment))
163-
{
164-
args.Add(Convert.ToBase64String(segment.Array!, segment.Offset, segment.Count));
165-
}
166-
else
167-
{
168-
var span = _vectorData.Span;
169-
var oversized = ArrayPool<byte>.Shared.Rent(span.Length);
170-
span.CopyTo(oversized);
171-
args.Add(Convert.ToBase64String(oversized, 0, span.Length));
172-
ArrayPool<byte>.Shared.Return(oversized);
173-
}
174-
#endif
175-
176-
_vectorConfig?.AddOwnArgs(args);
177-
}
140+
_search.AddOwnArgs(args);
141+
_vsim.AddOwnArgs(args);
178142

179143
if (_combiner is not null)
180144
{
@@ -244,7 +208,7 @@ static void AddReducer(Reducer reducer, List<object> args)
244208
}
245209
}
246210

247-
switch (_applyExpression)
211+
switch (_applyExpressionOrExpressions)
248212
{
249213
case string expression:
250214
AddApply(new ApplyExpression(expression), args);
@@ -374,9 +338,9 @@ static void AddApply(in ApplyExpression expr, List<object> args)
374338

375339
internal void Validate()
376340
{
377-
if (_query is null | _vectorField is null)
341+
if (!(_search.HasValue & _vsim.HasValue))
378342
{
379-
throw new InvalidOperationException($"Both the query ({nameof(Query)}(...)) and vector search ({nameof(VectorSimilaritySearch)}(...))) details must be set.");
343+
throw new InvalidOperationException($"Both the query ({nameof(Query)}(...)) and vector search ({nameof(VectorSearch)}(...))) details must be set.");
380344
}
381345
}
382346
}

src/NRedisStack/Search/HybridSearchQuery.QueryConfig.cs

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)