你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

分面导航示例

注意

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。

重要

标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。

本部分通过示例扩展分面导航配置,这些示例展示了基本用法和其他场景。

可分面字段在索引中定义,但 facet 参数和表达式在查询请求中定义。 如果有具有可分面字段的索引,可以尝试对现有索引进行分面层次结构(预览)、分面聚合(预览)和分面筛选器(预览)。

Facet 参数和语法

根据 API,分面查询通常是应用于搜索结果的分面表达式数组。 每个 facet 表达式都包含一个可分面字段名称,可以选择后跟逗号分隔的名称值对列表。

  • Facet 查询是包含 facet 属性的查询请求。
  • 可分面字段 是具有 facetable 属性的搜索索引中的字段定义。
  • count 是搜索结果中找到的每个方面的匹配项数。

下表介绍了示例中使用的分面参数。

面参数 描述 使用 例子
count 每个结构的最大分面术语数。 整数。 默认值为 10。 没有上限,但较高的值会降低性能,尤其是在分面字段包含大量唯一术语时。 这由 facet 查询分布在各个分片上的方式所导致。 可以将 count 设置为零或者设置为大于或等于“facetable”字段中唯一值的数量,以获取所有 facet 的准确计数。 这种取舍会导致延迟增加。 Tags,count:5 将分面导航响应限制为包含最多分面计数的 5 个分面容器,但它们可以按任意顺序排列。
sort 确定 facet 存储桶的顺序。 有效值为 count,, -countvalue。 -value 用于 count 列出从大到小的 facet。 用于 -count 按升序排序(从小到大)。 可使用 value 按 facet 值以升序对字母数字进行排序。 使用 -value 按值降序排序。 "facet=Category,count:3,sort:count" 获取搜索结果中的前三个 facet 存储桶,按每个类别中的匹配项数降序列出。 如果前三个类别是预算、延长住宿和豪华,而预算有 5 个命中数,延长住宿有 6 个,而豪华有 4 个,则 facet 存储桶将订购为“延长住宿”、“预算”、“豪华”。 另一个示例是"facet=Rating,sort:-value"。 它将按值的降序顺序为所有可能评级生成 facet。 如果评分从 1 到 5,那么等级的顺序为 5、4、3、2、1,而不考虑与每个评分匹配的文档数量。
values 提供分面标签的值。 设置为竖线分隔数字或 Edm.DateTimeOffset 值,用于指定 facet 项值的动态组。 这些值必须按顺序按升序列出才能获取预期结果。 "facet=baseRate,values:10 | 20" 生成三个 facet 存储桶:一个用于基准费率 0 到(但不包括)10,一个用于 10 到(但不包括)20,一个用于 20 和更高。 字符串 "facet=lastRenovationDate,values:2024-02-01T00:00:00Z" 生成两个 facet 存储桶:一个用于在 2024 年 2 月之前翻新的酒店,一个用于在 2024 年 2 月 1 日或以后翻新的酒店。
interval 为可分组为间隔的 facet 提供间隔序列。 对于数字来说,要大于零的整数间隔;对于日期时间值来说,可以是分钟、小时、日、周、月、季度或年。 "facet=baseRate,interval:100" 基于大小 100 的基准费率排名生成 facet 存储桶。 如果基准费率都在 60 到 600 美元之间,则 0-100、100-200、200-300、300-400、400-500 和 500-600 都有 facet 存储桶。 字符串 "facet=lastRenovationDate,interval:year" 为酒店翻新的每个年份生成一个 facet 存储桶。
timeoffset 指定设置时间边界时要考虑的 UTC 时间偏移量。 设置为 ([+-]hh:mm, [+-]hhmm, or [+-]hh)。 如果使用参数 timeoffset,则必须将其与间隔选项结合使用,并且仅当应用于类型 Edm.DateTimeOffset 的字段时。 "facet=lastRenovationDate,interval:day,timeoffset:-01:00" 使用自 01:00:00 UTC(即目标时区的午夜)开始的日边界。

count 和 sort 可以在同一属性规格中组合,但不能与 interval 或 values 组合。

interval 和 values 不能一起结合。

如果未指定 timeoffset,日期时间的间隔分面将基于 UTC 时间计算。 例如, "facet=lastRenovationDate,interval:day"日边界从 00:00:00 UTC 开始。

基本方面示例

以下分面查询适用于 hotels-sample 索引。 可以在搜索资源管理器中使用 JSON 视图 粘贴 JSON 查询。 如需入门帮助,请参阅 向搜索结果添加分面导航。

此第一个查询检索类别、评级、标记和具有特定范围内的 baseRate 值的会议室的 facet。 请注意,最后一个 facet 位于会议室集合的子字段上。 Facet 将计算父文档(酒店)而不是中间子文档(房间),因此响应确定每个定价类别中具有任何房间的酒店数。

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "ocean view",  
  "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ],
  "count": true 
}  

第二个示例使用筛选器在用户选择“Rating 3”和“Motel”类别后缩小先前分面查询结果的范围。

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "water view",  
  "facets": [ "Tags", "Rooms/BaseRate,values:80|150|220" ],
  "filter": "Rating eq 3 and Category eq 'Motel'",
  "count": true  
} 

第三个示例设置查询中返回的唯一术语的上限。 默认值为 10,但可以使用 facet 属性上的 count 参数增加或减少此值。 此示例返回城市的分面,最多限为 5 个。

POST /indexes/hotels-sample/docs/search?api-version={{api_version}}
{  
  "search": "view",  
  "facets": [ "Address/City,count:5" ],
  "count": true
} 

本示例显示了“Category”、“Tags”和“Rating”三个 facet,对“Tags”应用计数覆盖,对“Rating”应用范围覆盖,此外,在索引中它们以双精度数存储。

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "facets": [ 
        "Category", 
        "Tags,count:5", 
        "Rating,values:1|2|3|4|5"
    ],
    "count": true
}

对于每个分面导航树,系统默认限制为查询发现的前 10 个 facet 实例。 此默认值对于导航结构有意义,因为它会将值列表保留为可管理的大小。 可以通过将值赋给“count”来替代默认值。 例如, "Tags,count:5" 将“标记”部分下的标记数减少到前五名。

仅对于 Numeric 和 DateTime 值,可以在分面字段上显式设置值(例如,facet=Rating,values:1|2|3|4|5),从而将结果分隔为连续范围(根据数值或时间段确定范围)。 或者,可以添加“interval”,如中所示 facet=Rating,interval:1。

每个范围都是使用 0 作为起点构建的,列表中的一个值作为终结点,然后剪裁上一个范围以创建离散间隔。

不同值示例

可以构建一个查询,该查询将返回每个“facetable”字段中唯一值的计数。 本示例构建一个空查询或不限定的查询("search": "*"),该查询会匹配所有文档,但通过将 top 设置为零,只能获取计数,而不返回结果。

为了简洁起见,此查询仅包含两个在 hotels-sample 索引中标记为 facetable 的字段。

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "count": true,
    "top": 0,
    "facets": [ 
        "Category", "Address/StateProvince""
    ]
}

此查询的结果如下所示:

{
  "@odata.count": 50,
  "@search.facets": {
    "Address/StateProvince": [
      {
        "count": 9,
        "value": "WA"
      },
      {
        "count": 6,
        "value": "CA "
      },
      {
        "count": 4,
        "value": "FL"
      },
      {
        "count": 3,
        "value": "NY"
      },
      {
        "count": 3,
        "value": "OR"
      },
      {
        "count": 3,
        "value": "TX"
      },
      {
        "count": 2,
        "value": "GA"
      },
      {
        "count": 2,
        "value": "MA"
      },
      {
        "count": 2,
        "value": "TN"
      },
      {
        "count": 1,
        "value": "AZ"
      }
    ],
    "Category": [
      {
        "count": 13,
        "value": "Budget"
      },
      {
        "count": 12,
        "value": "Suite"
      },
      {
        "count": 7,
        "value": "Boutique"
      },
      {
        "count": 7,
        "value": "Resort and Spa"
      },
      {
        "count": 6,
        "value": "Extended-Stay"
      },
      {
        "count": 5,
        "value": "Luxury"
      }
    ]
  },
  "value": []
}

Facet 层次结构示例(预览版)

使用 latest preview REST API 或 Azure 门户,可以使用 > 和 ; 运算符配置分面层次结构。

操作员 描述
> 嵌套(分层)运算符表示父子关系。
; 分号运算符表示同一嵌套级别的多个字段,这些字段都是同一父级的子级。 父级必须仅包含一个字段。 父字段和子字段必须是 facetable。

分面表达式中包括分面层次结构的操作顺序如下:

  • 选项运算符(逗号 ,)用于分隔 facet 字段的 facet 参数,例如 Rooms/BaseRate,values 中的逗号
  • 括号,如将 (Rooms/BaseRate,values:50 ; Rooms/Type) 括起来的符号。
  • 嵌套运算符(尖括号 >)
  • 追加运算符(分号 ;),如本部分中第二个示例 "Tags>(Rooms/BaseRate,values:50 ; Rooms/Type)" 中所示,其中两个子 facet 是标记父级下面的对等方。

请注意,在嵌套和追加操作之前处理括号: A > B ; C 将不同于 A > (B ; C)。

分面层次结构有几个示例。 第一个示例是只返回几个文档的查询,这有助于查看完整响应。 Facet 对父文档(Hotels)而不是中间子文档(会议室)进行计数,因此响应确定每个 facet 存储桶中具有任何房间的酒店数。

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{
  "search": "ocean",  
  "facets": ["Address/StateProvince>Address/City", "Tags>Rooms/BaseRate,values:50"],
  "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
  "count": true 
}

此查询的结果如下所示。 两家酒店都有游泳池。 对于其他标签,只有一家酒店提供该设施。

{
  "@odata.count": 2,
  "@search.facets": {
    "Tags": [
      {
        "value": "pool",
        "count": 2,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 2
            }
          ]
        }
      },
      {
        "value": "air conditioning",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "bar",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "restaurant",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      },
      {
        "value": "view",
        "count": 1,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 1
            }
          ]
        }
      }
    ],
    "Address/StateProvince": [
      {
        "value": "FL",
        "count": 1,
        "@search.facets": {
          "Address/City": [
            {
              "value": "Tampa",
              "count": 1
            }
          ]
        }
      },
      {
        "value": "HI",
        "count": 1,
        "@search.facets": {
          "Address/City": [
            {
              "value": "Honolulu",
              "count": 1
            }
          ]
        }
      }
    ]
  },
  "value": [
    {
      "@search.score": 1.6076145,
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Tags": [
        "view",
        "pool",
        "restaurant"
      ],
      "Address": {
        "City": "Tampa",
        "StateProvince": "FL"
      }
    },
    {
      "@search.score": 1.0594962,
      "HotelName": "Windy Ocean Motel",
      "Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
      "Tags": [
        "pool",
        "air conditioning",
        "bar"
      ],
      "Address": {
        "City": "Honolulu",
        "StateProvince": "HI"
      }
    }
  ]
}

第二个示例扩展了上一个示例,演示了具有多个子级的多个顶级 facet。 请注意,分号 (;) 运算符分隔每个子项。

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{  
  "search": "+ocean",  
  "facets": ["Address/StateProvince > Address/City", "Tags > (Rooms/BaseRate,values:50 ; Rooms/Type)"],
  "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
  "count": true 
}  

部分响应(为简洁起见剪裁)显示具有房间基准费率和类型的子 facet 的标记。 在酒店示例索引中,匹配的两家酒店 +ocean 都有每种类型的房间和一个游泳池。

{
  "@odata.count": 2,
  "@search.facets": {
    "Tags": [
      {
        "value": "pool",
        "count": 2,
        "@search.facets": {
          "Rooms/BaseRate": [
            {
              "to": 50,
              "count": 0
            },
            {
              "from": 50,
              "count": 2
            }
          ],
          "Rooms/Type": [
            {
              "value": "Budget Room",
              "count": 2
            },
            {
              "value": "Deluxe Room",
              "count": 2
            },
            {
              "value": "Standard Room",
              "count": 2
            },
            {
              "value": "Suite",
              "count": 2
            }
          ]
        }}]},
  ...
}

最后一个示例展示了影响嵌套级别的括号优先级规则。 假设要按此顺序返回 facet 层次结构。

Address/StateProvince
  Address/City
    Category
    Rating

若要返回此层次结构,请创建一个查询,其中类别和分级是地址/城市下的同级。

  { 
    "search": "beach",  
    "facets": [
        "Address/StateProvince > (Address/City > (Category ; Rating))"
        ],
    "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
    "count": true 
  }

如果删除最内侧的括号,Category 和 Rating 将不再同级,因为优先级规则意味着 > 运算符会先于 ; 被计算。

  { 
    "search": "beach",  
    "facets": [
        "Address/StateProvince > (Address/City > Category ; Rating)"
        ],
    "select": "HotelName, Description, Tags, Address/StateProvince, Address/City",
    "count": true 
  }

顶级父级仍然是 Address/StateProvince,但现在 Address/City 和 Rating 处于同一级别。

Address/StateProvince
  Rating
  Address/City
    Category

分面筛选示例(预览版)

使用 latest preview REST API 或 Azure 门户,可以配置分面筛选器。

通过 facet 筛选,可以将返回的 facet 值限制为符合指定正则表达式的值。 两个新参数接受应用于 facet 字段的正则表达式:

  • includeTermFilter 将分面值筛选为与正则表达式匹配的值
  • excludeTermFilter 将分面值筛选为与正则表达式不匹配的值

如果 facet 字段同时满足两个条件,则优先使用 excludeTermFilter,因为存储桶字段组是先使用 includeTermFilter 进行评估,然后通过 excludeTermFilter 排除的。

仅返回与正则表达式匹配的分面值。 可以将这些参数与其他分面选项(例如,countsort和分层分面)组合在字符串字段上。

由于正则表达式嵌套在 JSON 字符串值内,因此必须转义双引号 (") 和反斜杠 (\) 字符。 正则表达式本身由正斜杠 (/) 分隔。 有关转义模式的详细信息,请参阅 正则表达式搜索。

以下示例演示如何转义正则表达式中的特殊字符,例如反斜杠、双引号或正则表达式语法字符。

{
    "search": "*", 
    "facets": ["name,includeTermFilter:/EscapeBackslash\\\OrDoubleQuote\\"OrRegexCharacter\\(/"] 
}

下面是一个 facet 筛选器的示例,该筛选器与“预算”和“延长住宿”酒店匹配,其中“评级”是每个酒店类别的子级。

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview
{ 
    "search": "*", 
    "facets": ["(Category,includeTermFilter:/(Budget|Extended-Stay)/)>Rating,values:1|2|3|4|5"],
    "select": "HotelName, Category, Rating",
    "count": true 
} 

以下示例是一个缩写的响应(为了简洁起见,省略酒店文档)。

{
  "@odata.count": 50,
  "@search.facets": {
    "Category": [
      {
        "value": "Budget",
        "count": 13,
        "@search.facets": {
          "Rating": [
            {
              "to": 1,
              "count": 0
            },
            {
              "from": 1,
              "to": 2,
              "count": 0
            },
            {
              "from": 2,
              "to": 3,
              "count": 4
            },
            {
              "from": 3,
              "to": 4,
              "count": 5
            },
            {
              "from": 4,
              "to": 5,
              "count": 4
            },
            {
              "from": 5,
              "count": 0
            }
          ]
        }
      },
      {
        "value": "Extended-Stay",
        "count": 6,
        "@search.facets": {
          "Rating": [
            {
              "to": 1,
              "count": 0
            },
            {
              "from": 1,
              "to": 2,
              "count": 0
            },
            {
              "from": 2,
              "to": 3,
              "count": 4
            },
            {
              "from": 3,
              "to": 4,
              "count": 1
            },
            {
              "from": 4,
              "to": 5,
              "count": 1
            },
            {
              "from": 5,
              "count": 0
            }
          ]
        }
      }
    ]
  }, 
  "value": [  ALL 50 HOTELS APPEAR HERE ]
}

分面聚合示例(预览)

可以使用 最新预览版 REST API 或 Azure 门户聚合维度。

分面聚合允许从分面值计算指标。 聚合功能可与现有的 facet 选项一起使用。

聚合 描述
求和 返回所有文档中字段的总累计值。 仅适用于数值类型。 在早期预览版本中受支持。
最小值 返回所有文档中字段的最小值。 仅适用于数值类型。
麦克斯 返回所有文档中字段的最大值。 仅适用于数值类型。
平均 返回来自所有文档的字段的平均值。 仅适用于数值类型。
基数 使用 HyperLogLog 算法返回所有文档中字段内非重复值的近似计数。 可以在可分面字段上请求 cardinality,包括字符串和日期/时间字段(以及其对应的集合表单)。

设置基数聚合的精度阈值

在基数聚合中,可以将选项 precisionThreshold 设置为一个界限,以区分那些预期能够接近准确的计数和那些可能不太准确的计数。 最大值为 40,000。 默认值为 3,000。

分面操作在内存中进行。 增加 precisionThreshold 会导致内存消耗量增加( precisionThreshold 值乘以 8 字节)。

示例:对分面聚合求和

您可以对数值数据类型的任何可分面字段(矢量和地理坐标除外)求和。

下面是使用 hotels-sample 索引的示例。 Room/SleepsCount 字段可分面且具有数值,因此我们选择此字段来演示总和。 如果我们对该字段求和,我们将获取整个酒店睡眠计数。 回想一下,facet 对父文档(酒店)而不是中间子文档(房间)进行计数,因此响应对整个酒店的所有房间的 SleepsCount 求和。 在此查询中,我们将添加一个筛选器,以便只对一家酒店的 SleepsCount 求和。

POST /indexes/hotels-sample/docs/search?api-version=2026-08-01-preview

{ 
      "search": "*",
      "filter": "HotelId eq '41'",
      "facets": [ "Rooms/SleepsCount, metric: sum"],
      "select": "HotelId, HotelName, Rooms/Type, Rooms/SleepsCount",
      "count": true
}

查询的响应可能如以下示例所示。 风洋模型总共可容纳 40 名客人。

{
  "@odata.count": 1,
  "@search.facets": {
    "Rooms/SleepsCount": [
      {
        "sum": 40.0
      }
    ]
  },
  "value": [
    {
      "@search.score": 1.0,
      "HotelId": "41",
      "HotelName": "Windy Ocean Motel",
      "Rooms": [
        {
          "Type": "Suite",
          "SleepsCount": 4
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Budget Room",
          "SleepsCount": 2
        },
        {
          "Type": "Budget Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 4
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 4
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Suite",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Deluxe Room",
          "SleepsCount": 2
        },
        {
          "Type": "Standard Room",
          "SleepsCount": 2
        }
      ]
    }
  ]
}

示例:所有聚合的组合

下面是使用假设的“facets”索引的示例,该索引显示每个聚合的语法。 请注意,基数具有额外的 precisionThreshold 选项(默认值为 3,000),在此示例中设置为 40,000。

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}}
Content-Type: application/json

{
    "search": "*",
    "facets": [// field names are named <something>Value in this example 
        "cardinalityValue, metric: cardinality,precisionThreshold: 40000", 
        "sumValue,metric: sum", 
        "avgValue,metric: avg", 
        "minValue,metric: min", 
        "maxValue,metric: max" 
    ] 
}

查询的响应可能如以下示例所示。

{ 
    "@search.facets": { 
        "cardinalityValue": [ 
            { 
                "cardinality": 24000 // Number of distinct values in "cardinalityValue" field 
            } 
        ], 
        "sumValue": [ 
            { 
                "sum": 1200000 // Sum of all values in "sumValue" field 
            } 
        ], 
        "avgValue": [ 
            { 
                "avg": 50 // Average of all values in "avgValue" field 
            } 
        ], 
        "minValue": [ 
            { 
                "min": 1 // Minimum value in "minValue" field 
            } 
        ], 
        "maxValue": [ 
            { 
                "max": 100 // Maximum value in "maxValue" field 
            } 
        ] 
    } 
}

示例:指定默认值以替换缺失值

当文档不包含值时,所有指标都支持指定默认值。

  • 对于非字符串类型(numeric、datetime、boolean),请将default参数设置为特定值: "default: 42"

  • 对于字符串类型,请将 default 参数设置为使用单个撇号分隔符分隔的字符串: "default: 'mystringhere'".

如果文档包含该字段的 null,则可以添加要使用的默认值: "facets": [ "Rooms/SleepsCount, metric: sum, default:2"] 如果房间的 Rooms/SleepsCount 字段为 null,则默认值将替代缺失值。

下面是一个说明每个字段类型的默认规范的请求。

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}} 
Content-Type: application/json 

{ 
    "search": "*", 
    "facets": [// field names are named <datatype>Value in this example 
        "stringfield, metric: cardinality, default: 'my string goes here'", 
        "doubleField,metric: sum, default: 5.0", 
        "intField,metric: sum, default: 5", 
        "longField,metric: sum, default: 5" 
    ] 
} 

对于字符串字段,使用单引号字符分隔默认值。 若要转义字符,请在前面加上反斜杠“'”。 所有字符在字符串分隔符内均有效。 终止字符不能是反斜杠。

示例:同一字段中的多个指标

如果基础数据支持用例,则可以在同一字段中指定多个指标。

POST https://search-service.search.windows.net/indexes/facets/docs/search?api-version=2026-08-01-preview
Authorization: Bearer {{token}} 
Content-Type: application/json 

{ 
    "search": "*", 
    "facets": [ 
        "fieldA, metric: cardinality, precisionThreshold: 40000", 
        "fieldA, metric: sum", 
        "fieldA, metric: avg", 
        "fieldA, metric: min", 
        "fieldA, metric: max" 
    ] 
}

查询的响应可能如以下示例所示。

{ 
    "@search.facets": { 
        "fieldA": [ 
            { 
                "cardinality": 24000 // Number of distinct values in "fieldA" field 
            }, 
            { 
                "sum": 1200000 // Sum of all values in " fieldA " field 
            }, 
            { 
                "avg": 5 // Avg of all values in " fieldA " field
            }, 
            { 
                "min": 0 // Min of all values in " fieldA " field 
            }, 
            { 
                "max": 1200 // Max of all values in " fieldA " field 
            } 
        ] 
    } 
}

后续步骤

重新访问工具和 API 的 分面导航配置 ,并查看有关在代码中使用分面的 最佳做法 。

建议使用 C#:将搜索添加到 Web 应用,以获取包含表示层代码的分面导航示例。 此示例还包括筛选器、建议和自动完成。 它对呈现层使用 JavaScript 和 React。