Azure 认知搜索中的 OData $select 语法

在 Azure 认知搜索中,$select 参数指定要包含在搜索结果中的字段。 本文介绍 $select 的 OData 语法,并提供了示例。

在 Azure 认知搜索的 OData 语言概述中介绍了字段路径构造和常数。 有关搜索结果组合的详细信息,请参阅如何在 Azure 认知搜索中使用搜索结果

语法

$select 参数确定在查询结果集中返回每个文档的哪些字段。 以下 EBNF(扩展巴科斯-瑙尔范式)定义了 $select 参数的语法:

select_expression ::= '*' | field_path(',' field_path)*

field_path ::= identifier('/'identifier)*

下面还提供了交互式语法图:

注意

请参阅适用于 Azure 认知搜索的 OData 表达式语法参考以获取完整的 EBNF。

$select 参数有两种形式:

  1. 单个星 (*),指示应返回所有可检索字段,或
  2. 以逗号分隔的字段路径列表,标识应返回的字段。

使用第二种形式时,只能在列表中指定可检索字段。

如果列出一个复杂字段而未显式指定其子字段,则所有可检索的子字段都将包含在查询结果集中。 例如,假设索引有一个 Address 字段,其中 StreetCityCountry 子字段都是可检索的。 如果在 $select 中指定 Address,则查询结果将包括所有三个子字段。

示例

在结果中包括 HotelIdHotelNameRating 顶级字段,以及 AddressCity 子字段:

    $select=HotelId, HotelName, Rating, Address/City

示例结果可能如下所示:

{
  "HotelId": "1",
  "HotelName": "Secret Point Motel",
  "Rating": 4,
  "Address": {
    "City": "Beijing"
  }
}

在结果中包含 HotelName 顶级字段。 包括 Address 的所有子字段。 在 Rooms 集合中包括每个对象的 TypeBaseRate 子字段:

    $select=HotelName, Address, Rooms/Type, Rooms/BaseRate

示例结果可能如下所示:

{
  "HotelName": "Secret Point Motel",
  "Rating": 4,
  "Address": {
    "StreetAddress": "677 5th Ave",
    "City": "Beijing",
    "StateProvince": "NY",
    "Country": "USA",
    "PostalCode": "10022"
  },
  "Rooms": [
    {
      "Type": "Budget Room",
      "BaseRate": 9.69
    },
    {
      "Type": "Budget Room",
      "BaseRate": 8.09
    }
  ]
}

后续步骤