You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure认知搜索/语义搜索查询返回字段平均值

Azure Search 实现AVG类聚合的正确方案

前置配置校验(请求失败90%是这几个配置没对)

  • 索引字段属性检查:存储年龄的age字段必须设置为可筛选(filterable: true),数值类型要设为Edm.Int32或者Edm.Double,如果建索引时把age设成了字符串类型、或者没开filterable,所有聚合请求都不会返回正确结果。
  • 索引器解析模式检查:从DataLake Blob同步CSV数据时,索引器的parsingMode必须配置为delimitedText,如果用默认的default模式,CSV文件会被识别为单个长文本块,不会拆成独立的age、department等结构化字段,根本没法做数值计算。
  • 列映射检查:跑个不带聚合的全量查询search=*&$select=age&top=5,确认返回结果里age字段有正常的数值,不是null或者乱码,如果值不对就去调整索引器的fieldMappings,把CSV里的年龄列和索引的age字段做正确映射。

正确的API请求参数写法

聚合是Azure Search的基础查询能力,和你用simple查询还是semantic语义查询没有冲突,不需要为了算聚合强行开语义配置。要实现SELECT AVG(age) FROM EMPLOYEES的效果,直接调用索引的docs查询接口,传如下JSON请求体即可,注意API版本要选2021-04-30之后的正式版本,过老的版本不支持聚合参数:

{
  "search": "*",
  "queryType": "simple",
  "select": "",
  "count": true,
  "top": 0,
  "aggregations": [
    {
      "field": "age",
      "type": "average",
      "name": "avg_employee_age"
    }
  ]
}

参数说明:

  • search: "*" 匹配索引里的所有员工记录,不需要传关键词
  • top: 0 表示不返回具体的单条员工文档,只返回聚合结果,能大幅减小响应体积
  • aggregations数组里可以同时加多个统计规则,比如要同时算平均年龄、最大年龄、员工总数,就追加对应配置:
"aggregations": [
  {"field": "age", "type": "average", "name": "avg_employee_age"},
  {"field": "age", "type": "maximum", "name": "max_employee_age"},
  {"field": "id", "type": "count", "name": "total_employee_count"}
]

如果要做带条件的聚合,比如只算某部门的平均年龄,加filter参数即可,和SQL的WHERE逻辑一致:

{
  "search": "*",
  "queryType": "simple",
  "filter": "department eq '研发中心'",
  "top": 0,
  "aggregations": [
    {"field": "age", "type": "average", "name": "avg_rd_age"}
  ]
}

常见失败原因排查

  • 只配置了语义查询参数没加aggregations:语义搜索的semanticConfiguration、queryType: "semantic"这类配置只负责结果的语义排序、摘要提取,本身不具备数值统计能力,不管用哪种查询类型,要拿统计结果必须显式传aggregations参数。
  • 聚合结果返回0或者null:先检查age字段的类型是不是数值型,再检查索引里的文档是不是都同步了age字段的值,字符串类型的字段不支持average、sum这类数值聚合。
  • 报400参数错误:检查API版本是不是太低,或者aggregations里引用的字段名是不是和索引schema里的字段名完全一致,字段名大小写敏感。

内容的提问来源于stack exchange,提问作者roney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:45:38