如何在Azure搜索初始查询中过滤低于指定最小search.score()的结果
Azure 认知搜索得分阈值过滤解决方案
直接在查询阶段过滤低分结果的实现方案
你可以直接在搜索请求的筛选逻辑中使用search.score()函数完成阈值过滤,无需修改索引结构、也不需要调整已导入的索引数据,该方案可以同时解决你提到的两个问题。
使用Azure.Search.Documents v11.3.0 .NET SDK的实现代码如下:
using Azure; using Azure.Search.Documents; using Azure.Search.Documents.Models; // 搜索客户端初始化 SearchClient searchClient = new SearchClient( new Uri("https://<你的搜索服务名>.search.windows.net/"), "<你的索引名称>", new AzureKeyCredential("<你的查询API密钥>") ); SearchOptions searchOptions = new SearchOptions { // 核心逻辑:过滤所有得分≥9的文档 Filter = "search.score() ge 9", // 可自由配置排序规则,按字母排序、按得分排序均不受影响 OrderBy = { "productName asc" }, // 开启总数统计,直接返回符合条件的文档总数量 IncludeTotalCount = true, // 分页参数按你的业务需求配置即可 Size = 20, Skip = 0 }; // 执行搜索请求 Response<SearchResults<Product>> response = await searchClient.SearchAsync<Product>("<你的搜索关键词>", searchOptions); SearchResults<Product> searchResults = response.Value; // 直接获取符合得分要求的总文档数,无需遍历所有分页 long? qualifiedTotalCount = searchResults.TotalCount; // 遍历当前页结果 foreach (SearchResult<Product> result in searchResults.GetResults()) { Product product = result.Document; double score = result.Score ?? 0; // 业务逻辑处理 }
方案优势
- 自动排除所有得分低于9的文档,所有后续排序、分页操作都在符合阈值要求的结果集内执行,按字母排序时不需要额外处理逻辑
- 开启
IncludeTotalCount参数后返回的TotalCount就是符合阈值要求的文档总数,不需要遍历全部分页统计 - 不需要对现有索引结构、已导入的索引数据做任何修改,开箱即可用
注意事项
search.score()返回的是应用完所有搜索评分规则(包括自定义评分配置)后的最终得分,过滤逻辑完全符合业务预期- 得分取值范围为0~100,9的阈值设置合法,无需做额外数值转换
内容的提问来源于stack exchange,提问作者Matty
相关产品推荐
相关产品推荐

