如何使用对象数组在 CosmosDB 中执行矢量搜索?

问题描述 投票:0回答:1

我有一个名为“vectormodels”的容器,其中包含

BgBomVectorModel
类型的项目。
My task is to return an array of BgBomVectorItem.
每个模型由 200 个 BgBomVectorItem 元素组成,容器总共包含 1000 个模型。我知道我需要的具体模型,因为我的客户将根据其 ID 选择模型。但是,它们仅需要所选模型中的 5 或 6 个 BgBomVectorItem 元素。因此,我需要在数组内执行向量搜索。

  • 我们有很多矢量搜索容器示例集合。但不在物体内部
  • 我正在使用语义内核。
  • 我怀疑问题出在索引策略上。
    public class BgBomVectorModel
    {
        [VectorStoreRecordKey]
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; } //<- will select by id

       
        public List<BgBomVectorItem> BomItemsInformation { get; set; } //<-  For this need Vectore  Search   
    }

    public class BgBomVectorItem
    {
        [VectorStoreRecordKey]
        public string id { get; set; }

        [VectorStoreRecordData(IsFullTextSearchable = true)]
        public string Information { get; set; }
        //Vector Embedding
        [VectorStoreRecordVector(4, DistanceFunction.EuclideanDistance, IndexKind.Flat)]
        public ReadOnlyMemory<float> DescriptionEmbedding { get; set; }
    }

我尝试在 CosmosDB 容器中执行向量搜索,特别是在每个 BgBomVectorModel 内的 BgBomVectorItem 元素数组中进行搜索。但是,到目前为止,我发现的大多数示例仅显示容器集合内的矢量搜索,而不是像我的例子那样显示对象内的矢量搜索。我原本期望根据特定模型的 ID 检索 BgBomVectorItem 元素的子集(5 或 6 个项目),但似乎当前的索引策略可能会阻止搜索在对象内正常工作。

c# azure-cosmosdb rag vector-search semantic-kernel
1个回答
0
投票

这看起来合适吗? 1-首先通过id获取BgBomVectorModel 2- 使用 BgBomVectorModel 的 BgBomVectorItem 列表进行搜索并找到最匹配的几个?

如果是这样,只为 BomItemsInformation 列表编写一个查询怎么样?

    SELECT TOP 10 c.id, VectorDistance(c.DescriptionEmbedding , [1,2,3]) AS SimilarityScore
    FROM c --(c is BomItemsInformation, the list)
    ORDER BY VectorDistance(c.DescriptionEmbedding , [1,2,3])
© www.soinside.com 2019 - 2024. All rights reserved.