Skip to content

Commit 6e129bb

Browse files
Merge branch 'master' into 4510-change-feed-processor-avad-ttl-istimeliveexpired-deserialization-issue
2 parents c85ea87 + 2b01585 commit 6e129bb

File tree

3 files changed

+180
-15
lines changed

3 files changed

+180
-15
lines changed

Microsoft.Azure.Cosmos/src/Query/Core/QueryPlan/QueryPartitionProvider.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,15 @@ internal TryCatch<PartitionedQueryExecutionInfoInternal> TryGetPartitionedQueryE
270270

271271
fixed (byte* bytePtr2 = buffer)
272272
{
273-
errorCode = ServiceInteropWrapper.GetPartitionKeyRangesFromQuery3(
273+
errorCode = ServiceInteropWrapper.GetPartitionKeyRangesFromQuery4(
274274
this.serviceProvider,
275275
querySpecJsonString,
276276
partitionKeyRangesApiOptions,
277277
allParts,
278278
partsLengths,
279279
(uint)partitionKeyDefinition.Paths.Count,
280+
vectorEmbeddingPolicyString,
281+
vectorEmbeddingPolicyString?.Length ?? 0,
280282
new IntPtr(bytePtr2),
281283
(uint)buffer.Length,
282284
out serializedQueryExecutionInfoResultLength);

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/QueryPlanBaselineTests.VectorSearch.xml

Lines changed: 132 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Results>
22
<Result>
33
<Input>
4-
<Description>Euclidean Distance</Description>
4+
<Description>Euclidean Distance with query parameter</Description>
55
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, @vectorEmbedding, true) AS SimilarityScore
66
FROM c
77
ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)</Query>
@@ -59,7 +59,7 @@ ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)]]></RewrittenQuery>
5959
</Result>
6060
<Result>
6161
<Input>
62-
<Description>Cosine Similarity</Description>
62+
<Description>Cosine Similarity with query parameter</Description>
6363
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, @vectorEmbedding, true) AS SimilarityScore
6464
FROM c
6565
ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)</Query>
@@ -117,7 +117,7 @@ ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)]]></RewrittenQuery>
117117
</Result>
118118
<Result>
119119
<Input>
120-
<Description>Dot Product</Description>
120+
<Description>Dot Product with query parameter</Description>
121121
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, @vectorEmbedding, true) AS SimilarityScore
122122
FROM c
123123
ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)</Query>
@@ -173,4 +173,133 @@ ORDER BY VectorDistance(c.embedding, @vectorEmbedding, true)]]></RewrittenQuery>
173173
</PartitionedQueryExecutionInfoInternal>
174174
</Output>
175175
</Result>
176+
<Result>
177+
<Input>
178+
<Description>Euclidean Distance with inline vector</Description>
179+
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true) AS SimilarityScore
180+
FROM c
181+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true)</Query>
182+
<PartitionKeys>
183+
<Key>/PartitionKey</Key>
184+
</PartitionKeys>
185+
<PartitionKeyType>Hash</PartitionKeyType>
186+
<GeospatialType>Geography</GeospatialType>
187+
</Input>
188+
<Output>
189+
<PartitionedQueryExecutionInfoInternal>
190+
<QueryInfo>
191+
<DistinctType>None</DistinctType>
192+
<Top>10</Top>
193+
<Offset />
194+
<Limit />
195+
<GroupByExpressions />
196+
<OrderBy>
197+
<SortOrder>Ascending</SortOrder>
198+
</OrderBy>
199+
<OrderByExpressions>
200+
<OrderByExpression>VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)</OrderByExpression>
201+
</OrderByExpressions>
202+
<Aggregates />
203+
<GroupByAliasToAggregateType />
204+
<GroupByAliases />
205+
<HasSelectValue>False</HasSelectValue>
206+
</QueryInfo>
207+
<QueryRanges>
208+
<Range>
209+
<Range>[[],"Infinity")</Range>
210+
</Range>
211+
</QueryRanges>
212+
<RewrittenQuery><![CDATA[SELECT TOP 10 c._rid, [{"item": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)}] AS orderByItems, {"Title": c.title, "SimilarityScore": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)} AS payload
213+
FROM c
214+
WHERE ({documentdb-formattableorderbyquery-filter})
215+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)]]></RewrittenQuery>
216+
</PartitionedQueryExecutionInfoInternal>
217+
</Output>
218+
</Result>
219+
<Result>
220+
<Input>
221+
<Description>Cosine Similarity with inline vector</Description>
222+
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true) AS SimilarityScore
223+
FROM c
224+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true)</Query>
225+
<PartitionKeys>
226+
<Key>/PartitionKey</Key>
227+
</PartitionKeys>
228+
<PartitionKeyType>Hash</PartitionKeyType>
229+
<GeospatialType>Geography</GeospatialType>
230+
</Input>
231+
<Output>
232+
<PartitionedQueryExecutionInfoInternal>
233+
<QueryInfo>
234+
<DistinctType>None</DistinctType>
235+
<Top>10</Top>
236+
<Offset />
237+
<Limit />
238+
<GroupByExpressions />
239+
<OrderBy>
240+
<SortOrder>Descending</SortOrder>
241+
</OrderBy>
242+
<OrderByExpressions>
243+
<OrderByExpression>VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)</OrderByExpression>
244+
</OrderByExpressions>
245+
<Aggregates />
246+
<GroupByAliasToAggregateType />
247+
<GroupByAliases />
248+
<HasSelectValue>False</HasSelectValue>
249+
</QueryInfo>
250+
<QueryRanges>
251+
<Range>
252+
<Range>[[],"Infinity")</Range>
253+
</Range>
254+
</QueryRanges>
255+
<RewrittenQuery><![CDATA[SELECT TOP 10 c._rid, [{"item": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)}] AS orderByItems, {"Title": c.title, "SimilarityScore": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)} AS payload
256+
FROM c
257+
WHERE ({documentdb-formattableorderbyquery-filter})
258+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)]]></RewrittenQuery>
259+
</PartitionedQueryExecutionInfoInternal>
260+
</Output>
261+
</Result>
262+
<Result>
263+
<Input>
264+
<Description>Dot Product with inline vector</Description>
265+
<Query>SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true) AS SimilarityScore
266+
FROM c
267+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true)</Query>
268+
<PartitionKeys>
269+
<Key>/PartitionKey</Key>
270+
</PartitionKeys>
271+
<PartitionKeyType>Hash</PartitionKeyType>
272+
<GeospatialType>Geography</GeospatialType>
273+
</Input>
274+
<Output>
275+
<PartitionedQueryExecutionInfoInternal>
276+
<QueryInfo>
277+
<DistinctType>None</DistinctType>
278+
<Top>10</Top>
279+
<Offset />
280+
<Limit />
281+
<GroupByExpressions />
282+
<OrderBy>
283+
<SortOrder>Descending</SortOrder>
284+
</OrderBy>
285+
<OrderByExpressions>
286+
<OrderByExpression>VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)</OrderByExpression>
287+
</OrderByExpressions>
288+
<Aggregates />
289+
<GroupByAliasToAggregateType />
290+
<GroupByAliases />
291+
<HasSelectValue>False</HasSelectValue>
292+
</QueryInfo>
293+
<QueryRanges>
294+
<Range>
295+
<Range>[[],"Infinity")</Range>
296+
</Range>
297+
</QueryRanges>
298+
<RewrittenQuery><![CDATA[SELECT TOP 10 c._rid, [{"item": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)}] AS orderByItems, {"Title": c.title, "SimilarityScore": VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)} AS payload
299+
FROM c
300+
WHERE ({documentdb-formattableorderbyquery-filter})
301+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, (- 0.0056763873435556889), (- 0.013547309674322605), (- 0.0024455438833683729), 0.015792045742273331, (- 0.016796082258224487), (- 0.012471556663513184)], true)]]></RewrittenQuery>
302+
</PartitionedQueryExecutionInfoInternal>
303+
</Output>
304+
</Result>
176305
</Results>

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/QueryPlanBaselineTests.cs

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,28 +1357,62 @@ public void VectorSearch()
13571357
{
13581358
List<QueryPlanBaselineTestInput> testCases = new List<QueryPlanBaselineTestInput>
13591359
{
1360-
MakeVectorTest("Euclidean Distance", Cosmos.DistanceFunction.Euclidean),
1361-
MakeVectorTest("Cosine Similarity", Cosmos.DistanceFunction.Cosine),
1362-
MakeVectorTest("Dot Product", Cosmos.DistanceFunction.DotProduct),
1360+
MakeVectorTest("Euclidean Distance with query parameter", Cosmos.DistanceFunction.Euclidean),
1361+
MakeVectorTest("Cosine Similarity with query parameter", Cosmos.DistanceFunction.Cosine),
1362+
MakeVectorTest("Dot Product with query parameter", Cosmos.DistanceFunction.DotProduct),
1363+
MakeInlineVectorQueryTest("Euclidean Distance with inline vector", Cosmos.DistanceFunction.Euclidean),
1364+
MakeInlineVectorQueryTest("Cosine Similarity with inline vector", Cosmos.DistanceFunction.Cosine),
1365+
MakeInlineVectorQueryTest("Dot Product with inline vector", Cosmos.DistanceFunction.DotProduct),
13631366
};
13641367

13651368
this.ExecuteTestSuite(testCases);
13661369
}
13671370

1371+
private static QueryPlanBaselineTestInput MakeInlineVectorQueryTest(string description, Cosmos.DistanceFunction distanceFunction)
1372+
{
1373+
PartitionKeyDefinition partitionKeyDefinition = CreateHashPartitionKey("/PartitionKey");
1374+
1375+
Cosmos.VectorEmbeddingPolicy vectorEmbeddingPolicy = new Cosmos.VectorEmbeddingPolicy(new Collection<Cosmos.Embedding>
1376+
{
1377+
new Cosmos.Embedding
1378+
{
1379+
Path = "/embedding",
1380+
DataType = Cosmos.VectorDataType.Float32,
1381+
Dimensions = 8,
1382+
DistanceFunction = distanceFunction
1383+
}
1384+
});
1385+
1386+
string queryText = @"SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true) AS SimilarityScore
1387+
FROM c
1388+
ORDER BY VectorDistance(c.embedding, [0.0039695268496870995, 0.027338456362485886, -0.005676387343555689, -0.013547309674322605, -0.002445543883368373, 0.01579204574227333, -0.016796082258224487, -0.012471556663513184], true)";
1389+
1390+
SqlQuerySpec sqlQuerySpec = new SqlQuerySpec(queryText);
1391+
1392+
QueryPlanBaselineTestInput testInput = new QueryPlanBaselineTestInput(
1393+
description,
1394+
partitionKeyDefinition,
1395+
vectorEmbeddingPolicy,
1396+
sqlQuerySpec,
1397+
Cosmos.GeospatialType.Geography);
1398+
1399+
return testInput;
1400+
}
1401+
13681402
private static QueryPlanBaselineTestInput MakeVectorTest(string description, Cosmos.DistanceFunction distanceFunction)
13691403
{
13701404
PartitionKeyDefinition partitionKeyDefinition = CreateHashPartitionKey("/PartitionKey");
13711405

13721406
Cosmos.VectorEmbeddingPolicy vectorEmbeddingPolicy = new Cosmos.VectorEmbeddingPolicy(new Collection<Cosmos.Embedding>
1407+
{
1408+
new Cosmos.Embedding
13731409
{
1374-
new Cosmos.Embedding
1375-
{
1376-
Path = "/embedding",
1377-
DataType = Cosmos.VectorDataType.Float32,
1378-
Dimensions = 8,
1379-
DistanceFunction = distanceFunction
1380-
}
1381-
});
1410+
Path = "/embedding",
1411+
DataType = Cosmos.VectorDataType.Float32,
1412+
Dimensions = 8,
1413+
DistanceFunction = distanceFunction
1414+
}
1415+
});
13821416

13831417
string queryText = @"SELECT TOP 10 c.title AS Title, VectorDistance(c.embedding, @vectorEmbedding, true) AS SimilarityScore
13841418
FROM c

0 commit comments

Comments
 (0)