如何通过.NET SDK获取Azure Search的@search.score默认搜索评分
获取Azure Search文档的@search.score值(.NET SDK)
别担心,用.NET SDK获取这个搜索评分其实非常直接,不管你用的是最新的Azure SDK包还是旧版的,都有现成的方式拿到这个值,不需要额外配置。
针对新版Azure.Search.Documents包(v11+,推荐使用)
现在Azure官方主推的是Azure.Search.Documents NuGet包,当你执行搜索请求后,返回的结果会封装在SearchResult<T>对象里,其中的Score属性就是你要找的@search.score值——完全不需要在你的文档模型里额外定义这个字段,SDK已经帮你处理好了元数据的提取。
举个实际的代码示例:
// 先定义你的文档实体模型 public class ProductDocument { public string Id { get; set; } public string ProductName { get; set; } public string Description { get; set; } // 其他业务字段... } // 初始化SearchClient(记得替换成你的服务信息) var searchClient = new SearchClient( new Uri("https://your-search-service.search.windows.net"), "your-index-name", new AzureKeyCredential("your-api-key") ); // 执行搜索请求 var searchOptions = new SearchOptions(); // 可以根据需求添加筛选、排序、选择字段等配置 var searchResponse = await searchClient.SearchAsync<ProductDocument>("你的搜索关键词", searchOptions); // 遍历结果并获取评分 await foreach (var result in searchResponse.Value.GetResultsAsync()) { Console.WriteLine($"产品ID: {result.Document.Id}, 搜索评分: {result.Score}"); // 这里的result.Score就是Portal里看到的@search.score值 }
针对旧版Microsoft.Azure.Search包(v10及以下)
如果你还在使用旧版的Microsoft.Azure.Search包,逻辑其实差不多,只是返回的结果类型是DocumentSearchResult<T>,里面的Results集合同样包含SearchResult<T>对象,Score属性对应@search.score:
// 初始化旧版的SearchIndexClient var searchIndexClient = new SearchIndexClient( new Uri("https://your-search-service.search.windows.net"), new SearchCredentials("your-api-key") ); var searchParams = new SearchParameters(); var searchResponse = await searchIndexClient.Documents.SearchAsync<ProductDocument>("你的搜索关键词", searchParams); // 遍历结果 foreach (var result in searchResponse.Results) { Console.WriteLine($"产品ID: {result.Document.Id}, 搜索评分: {result.Score}"); }
额外小技巧:把评分和文档绑定返回
如果需要把评分作为文档的一部分返回给前端或者其他业务模块,可以创建一个简单的DTO来封装:
public class DocumentWithScore<T> { public T Document { get; set; } public double SearchScore { get; set; } } // 转换搜索结果 var documentsWithScores = await searchResponse.Value.GetResultsAsync() .Select(result => new DocumentWithScore<ProductDocument> { Document = result.Document, SearchScore = result.Score }) .ToListAsync();
默认评分配置下,这个Score值就是Azure Search使用的默认BM25(或旧版TF-IDF)算法计算出的评分,不需要额外启用任何配置,只要执行搜索就能自动拿到。
内容的提问来源于stack exchange,提问作者Giuseppe Adamo
相关产品推荐
相关产品推荐

