@@ -37,16 +37,19 @@ public void BuildSearchQueryByDefaultReturnsValidQueryDefinition()
37
37
. EqualTo ( "TestProperty2" , "test-value-2" )
38
38
. AnyTagEqualTo ( "TestProperty3" , "test-value-3" ) ;
39
39
40
- var searchOptions = new VectorSearchOptions < DummyType > { OldFilter = filter , Skip = 5 , Top = 10 } ;
41
-
42
40
// Act
43
- var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery (
41
+ var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery < ReadOnlyMemory < float > , DummyType > (
44
42
vector ,
43
+ keywords : null ,
45
44
fields ,
46
45
this . _storagePropertyNames ,
47
46
vectorPropertyName ,
47
+ textPropertyName : null ,
48
48
ScorePropertyName ,
49
- searchOptions ) ;
49
+ oldFilter : filter ,
50
+ filter : null ,
51
+ 10 ,
52
+ 5 ) ;
50
53
51
54
var queryText = queryDefinition . QueryText ;
52
55
var queryParameters = queryDefinition . GetQueryParameters ( ) ;
@@ -56,22 +59,16 @@ public void BuildSearchQueryByDefaultReturnsValidQueryDefinition()
56
59
Assert . Contains ( "FROM x" , queryText ) ;
57
60
Assert . Contains ( "WHERE x.test_property_2 = @cv0 AND ARRAY_CONTAINS(x.test_property_3, @cv1)" , queryText ) ;
58
61
Assert . Contains ( "ORDER BY VectorDistance(x.test_property_1, @vector)" , queryText ) ;
59
- Assert . Contains ( "OFFSET @offset LIMIT @limit " , queryText ) ;
62
+ Assert . Contains ( "OFFSET 5 LIMIT 10 " , queryText ) ;
60
63
61
64
Assert . Equal ( "@vector" , queryParameters [ 0 ] . Name ) ;
62
65
Assert . Equal ( vector , queryParameters [ 0 ] . Value ) ;
63
66
64
- Assert . Equal ( "@offset" , queryParameters [ 1 ] . Name ) ;
65
- Assert . Equal ( 5 , queryParameters [ 1 ] . Value ) ;
66
-
67
- Assert . Equal ( "@limit" , queryParameters [ 2 ] . Name ) ;
68
- Assert . Equal ( 10 , queryParameters [ 2 ] . Value ) ;
69
-
70
- Assert . Equal ( "@cv0" , queryParameters [ 3 ] . Name ) ;
71
- Assert . Equal ( "test-value-2" , queryParameters [ 3 ] . Value ) ;
67
+ Assert . Equal ( "@cv0" , queryParameters [ 1 ] . Name ) ;
68
+ Assert . Equal ( "test-value-2" , queryParameters [ 1 ] . Value ) ;
72
69
73
- Assert . Equal ( "@cv1" , queryParameters [ 4 ] . Name ) ;
74
- Assert . Equal ( "test-value-3" , queryParameters [ 4 ] . Value ) ;
70
+ Assert . Equal ( "@cv1" , queryParameters [ 2 ] . Name ) ;
71
+ Assert . Equal ( "test-value-3" , queryParameters [ 2 ] . Value ) ;
75
72
}
76
73
77
74
[ Fact ]
@@ -86,39 +83,39 @@ public void BuildSearchQueryWithoutOffsetReturnsQueryDefinitionWithTopParameter(
86
83
. EqualTo ( "TestProperty2" , "test-value-2" )
87
84
. AnyTagEqualTo ( "TestProperty3" , "test-value-3" ) ;
88
85
89
- var searchOptions = new VectorSearchOptions < DummyType > { OldFilter = filter , Top = 10 } ;
90
-
91
86
// Act
92
- var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery (
87
+ var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery < ReadOnlyMemory < float > , DummyType > (
93
88
vector ,
89
+ keywords : null ,
94
90
fields ,
95
91
this . _storagePropertyNames ,
96
92
vectorPropertyName ,
93
+ textPropertyName : null ,
97
94
ScorePropertyName ,
98
- searchOptions ) ;
95
+ oldFilter : filter ,
96
+ filter : null ,
97
+ 10 ,
98
+ 0 ) ;
99
99
100
100
var queryText = queryDefinition . QueryText ;
101
101
var queryParameters = queryDefinition . GetQueryParameters ( ) ;
102
102
103
103
// Assert
104
- Assert . Contains ( "SELECT TOP @top x.test_property_1,x.test_property_2,x.test_property_3,VectorDistance(x.test_property_1, @vector) AS TestScore" , queryText ) ;
104
+ Assert . Contains ( "SELECT TOP 10 x.test_property_1,x.test_property_2,x.test_property_3,VectorDistance(x.test_property_1, @vector) AS TestScore" , queryText ) ;
105
105
Assert . Contains ( "FROM x" , queryText ) ;
106
106
Assert . Contains ( "WHERE x.test_property_2 = @cv0 AND ARRAY_CONTAINS(x.test_property_3, @cv1)" , queryText ) ;
107
107
Assert . Contains ( "ORDER BY VectorDistance(x.test_property_1, @vector)" , queryText ) ;
108
108
109
- Assert . DoesNotContain ( "OFFSET @offset LIMIT @limit " , queryText ) ;
109
+ Assert . DoesNotContain ( "OFFSET 0 LIMIT 10 " , queryText ) ;
110
110
111
111
Assert . Equal ( "@vector" , queryParameters [ 0 ] . Name ) ;
112
112
Assert . Equal ( vector , queryParameters [ 0 ] . Value ) ;
113
113
114
- Assert . Equal ( "@top" , queryParameters [ 1 ] . Name ) ;
115
- Assert . Equal ( 10 , queryParameters [ 1 ] . Value ) ;
116
-
117
- Assert . Equal ( "@cv0" , queryParameters [ 2 ] . Name ) ;
118
- Assert . Equal ( "test-value-2" , queryParameters [ 2 ] . Value ) ;
114
+ Assert . Equal ( "@cv0" , queryParameters [ 1 ] . Name ) ;
115
+ Assert . Equal ( "test-value-2" , queryParameters [ 1 ] . Value ) ;
119
116
120
- Assert . Equal ( "@cv1" , queryParameters [ 3 ] . Name ) ;
121
- Assert . Equal ( "test-value-3" , queryParameters [ 3 ] . Value ) ;
117
+ Assert . Equal ( "@cv1" , queryParameters [ 2 ] . Name ) ;
118
+ Assert . Equal ( "test-value-3" , queryParameters [ 2 ] . Value ) ;
122
119
}
123
120
124
121
[ Fact ]
@@ -131,17 +128,20 @@ public void BuildSearchQueryWithInvalidFilterThrowsException()
131
128
132
129
var filter = new VectorSearchFilter ( ) . EqualTo ( "non-existent-property" , "test-value-2" ) ;
133
130
134
- var searchOptions = new VectorSearchOptions < DummyType > { OldFilter = filter , Skip = 5 , Top = 10 } ;
135
-
136
131
// Act & Assert
137
132
Assert . Throws < InvalidOperationException > ( ( ) =>
138
- AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery (
133
+ AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery < ReadOnlyMemory < float > , DummyType > (
139
134
vector ,
135
+ keywords : null ,
140
136
fields ,
141
137
this . _storagePropertyNames ,
142
138
vectorPropertyName ,
139
+ textPropertyName : null ,
143
140
ScorePropertyName ,
144
- searchOptions ) ) ;
141
+ oldFilter : filter ,
142
+ filter : null ,
143
+ 10 ,
144
+ 5 ) ) ;
145
145
}
146
146
147
147
[ Fact ]
@@ -152,31 +152,29 @@ public void BuildSearchQueryWithoutFilterDoesNotContainWhereClause()
152
152
var vectorPropertyName = "test_property_1" ;
153
153
var fields = this . _storagePropertyNames . Values . ToList ( ) ;
154
154
155
- var searchOptions = new VectorSearchOptions < DummyType > { Skip = 5 , Top = 10 } ;
156
-
157
155
// Act
158
- var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery (
156
+ var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery < ReadOnlyMemory < float > , DummyType > (
159
157
vector ,
158
+ keywords : null ,
160
159
fields ,
161
160
this . _storagePropertyNames ,
162
161
vectorPropertyName ,
162
+ textPropertyName : null ,
163
163
ScorePropertyName ,
164
- searchOptions ) ;
164
+ oldFilter : null ,
165
+ filter : null ,
166
+ 10 ,
167
+ 5 ) ;
165
168
166
169
var queryText = queryDefinition . QueryText ;
167
170
var queryParameters = queryDefinition . GetQueryParameters ( ) ;
168
171
169
172
// Assert
170
173
Assert . DoesNotContain ( "WHERE" , queryText ) ;
174
+ Assert . Contains ( "OFFSET 5 LIMIT 10" , queryText ) ;
171
175
172
176
Assert . Equal ( "@vector" , queryParameters [ 0 ] . Name ) ;
173
177
Assert . Equal ( vector , queryParameters [ 0 ] . Value ) ;
174
-
175
- Assert . Equal ( "@offset" , queryParameters [ 1 ] . Name ) ;
176
- Assert . Equal ( 5 , queryParameters [ 1 ] . Value ) ;
177
-
178
- Assert . Equal ( "@limit" , queryParameters [ 2 ] . Name ) ;
179
- Assert . Equal ( 10 , queryParameters [ 2 ] . Value ) ;
180
178
}
181
179
182
180
[ Fact ]
@@ -215,6 +213,54 @@ FROM x
215
213
Assert . Equal ( "partition_key" , queryParameters [ 1 ] . Value ) ;
216
214
}
217
215
216
+ [ Fact ]
217
+ public void BuildSearchQueryWithHybridFieldsReturnsValidHybridQueryDefinition ( )
218
+ {
219
+ // Arrange
220
+ var vector = new ReadOnlyMemory < float > ( [ 1f , 2f , 3f ] ) ;
221
+ var keywordText = "hybrid" ;
222
+ var vectorPropertyName = "test_property_1" ;
223
+ var textPropertyName = "test_property_2" ;
224
+ var fields = this . _storagePropertyNames . Values . ToList ( ) ;
225
+
226
+ var filter = new VectorSearchFilter ( )
227
+ . EqualTo ( "TestProperty2" , "test-value-2" )
228
+ . AnyTagEqualTo ( "TestProperty3" , "test-value-3" ) ;
229
+
230
+ // Act
231
+ var queryDefinition = AzureCosmosDBNoSQLVectorStoreCollectionQueryBuilder . BuildSearchQuery < ReadOnlyMemory < float > , DummyType > (
232
+ vector ,
233
+ [ keywordText ] ,
234
+ fields ,
235
+ this . _storagePropertyNames ,
236
+ vectorPropertyName ,
237
+ textPropertyName ,
238
+ ScorePropertyName ,
239
+ oldFilter : filter ,
240
+ filter : null ,
241
+ 10 ,
242
+ 5 ) ;
243
+
244
+ var queryText = queryDefinition . QueryText ;
245
+ var queryParameters = queryDefinition . GetQueryParameters ( ) ;
246
+
247
+ // Assert
248
+ Assert . Contains ( "SELECT x.test_property_1,x.test_property_2,x.test_property_3,VectorDistance(x.test_property_1, @vector) AS TestScore" , queryText ) ;
249
+ Assert . Contains ( "FROM x" , queryText ) ;
250
+ Assert . Contains ( "WHERE x.test_property_2 = @cv0 AND ARRAY_CONTAINS(x.test_property_3, @cv1)" , queryText ) ;
251
+ Assert . Contains ( "ORDER BY RANK RRF(VectorDistance(x.test_property_1, @vector), FullTextScore(x.test_property_2, [\" hybrid\" ]))" , queryText ) ;
252
+ Assert . Contains ( "OFFSET 5 LIMIT 10" , queryText ) ;
253
+
254
+ Assert . Equal ( "@vector" , queryParameters [ 0 ] . Name ) ;
255
+ Assert . Equal ( vector , queryParameters [ 0 ] . Value ) ;
256
+
257
+ Assert . Equal ( "@cv0" , queryParameters [ 1 ] . Name ) ;
258
+ Assert . Equal ( "test-value-2" , queryParameters [ 1 ] . Value ) ;
259
+
260
+ Assert . Equal ( "@cv1" , queryParameters [ 2 ] . Name ) ;
261
+ Assert . Equal ( "test-value-3" , queryParameters [ 2 ] . Value ) ;
262
+ }
263
+
218
264
#pragma warning disable CA1812 // An internal class that is apparently never instantiated. If so, remove the code from the assembly.
219
265
private sealed class DummyType ;
220
266
#pragma warning restore CA1812
0 commit comments