LiteDB Vector功能疑问:如何获取计算得出的匹配分数?
获取LiteDB TopKNear查询的向量匹配分数
在LiteDB预发布版的向量功能中,要获取TopKNear查询的匹配分数,只需在调用TopKNear(...)之后链式调用IncludeScore()方法即可:
文档型查询示例
// 执行带分数返回的向量查询 var topResults = col.Query() .TopKNear("vector_field", targetVector, k: 10) .IncludeScore() .ToList(); // 遍历结果提取分数 foreach (var doc in topResults) { var matchScore = doc.Get<double>("_score"); // 默认分数字段名为"_score" // 处理文档逻辑... }
自定义分数字段名
如果不想使用默认的_score字段名,可给IncludeScore()传入自定义字段名:
var results = col.Query() .TopKNear("vector_field", targetVector, k: 5) .IncludeScore("match_score") .ToList(); // 提取自定义字段的分数 var score = doc.Get<double>("match_score");
强类型实体场景
若使用强类型实体,需在实体类中添加对应分数属性,再通过表达式指定映射:
public class Product { public ObjectId Id { get; set; } public string Name { get; set; } public float[] Embedding { get; set; } public double MatchScore { get; set; } // 存储匹配分数的属性 } // 查询并映射分数到实体属性 var products = col.Query<Product>() .TopKNear(p => p.Embedding, targetVector, k: 5) .IncludeScore(p => p.MatchScore) .ToList(); // 直接访问实体的分数属性 foreach (var product in products) { Console.WriteLine($"产品:{product.Name},匹配分数:{product.MatchScore}"); }
IncludeScore()是预发布版LiteDB为向量查询新增的专属方法,会将向量相似度计算的分数直接注入返回结果,无需额外手动计算。
内容的提问来源于stack exchange,提问作者Christian Riedl
相关产品推荐
相关产品推荐

