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

搜索文档(Azure 认知搜索 REST API)

查询请求针对搜索服务上的单个索引的文档集合。 它包括定义匹配条件的参数,以及用于调整响应的参数。 从 2021-04-30-Preview API 版本开始,还可以使用 索引别名 来定位特定索引,而不是使用索引名称本身。

可以使用 GET 或 POST。 查询参数在 GET 请求的情况下在查询字符串上指定,在 POST 请求的情况下在请求正文中指定。

GET https://[service name].search.windows.net/indexes/[index name]/docs?[query parameters] 
  Content-Type: application/json   
  api-key: [admin or query key]  

如果使用 POST,请将“search”操作添加为 URI 参数。

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]  
  Content-Type: application/json  
  api-key: [admin or query key]  

使用 GET 调用时,请求 URL 的长度不能超过 8 KB。 对于大多数应用程序来说,此长度通常就足够了。 但是,某些应用程序生成非常大的查询,尤其是在使用 OData 筛选器表达式时。 对于这些应用程序,HTTP POST 是更好的选择,因为它允许比 GET 更大的筛选器。

对于 POST,限制因素是筛选器中子句的数量,而不是原始筛选器字符串的大小,因为 POST 的请求大小限制大约为 16 MB。 即使 POST 请求大小限制非常大,筛选器表达式也不能任意复杂。 有关筛选器复杂性限制的详细信息,请参阅适用于Azure 认知搜索的 OData 表达式语法

URI 参数

参数 说明
[服务名称] 必需。 将此设置为搜索服务的唯一用户定义的名称。
[索引名称]/docs 必需。 指定命名索引的文档集合。
[查询参数] 查询参数在 GET 请求的 URI 和 POST 请求的请求正文中指定。
api-version 必需。 当前稳定版本为 api-version=2020-06-30. 有关更多版本,请参阅 API 版本 。 对于查询,API 版本始终指定为 GET 和 POST 的 URI 参数。

URL 编码建议

请记住直接调用 GET REST API 时 URL 编码 特定的查询参数。 对于 搜索文档 操作,以下查询参数可能需要 URL 编码:

  • search
  • $filter
  • facet
  • highlightPreTag
  • highlightPostTag

仅建议对单个参数使用 URL 编码。 如果你无意中对整个查询字符串(? 后的所有内容)进行 URL 编码,请求将中断。

此外,仅在使用 GET 直接调用 REST API 时,必须进行 URL 编码。 使用 POST 或使用处理编码的 Azure 认知搜索 .NET 客户端库时,无需 URL 编码。

请求标头

下表介绍必需和可选的请求标头。

字段 说明
Content-Type 必需。 将此设置为“application/json”
api-key 必需。 一个唯一的系统生成的字符串,用于对搜索服务的请求进行身份验证。 针对文档集合的查询请求可以将管理密钥或查询密钥指定为 API 密钥。 查询键用于对文档集合执行只读操作。 可以在Azure 门户的搜索服务仪表板中找到 API 密钥

请求正文

对于 GET:无。

对于 POST:

{  
     "count": true | false (default),  
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "filter": "odata_filter_expression",  
     "highlight": "highlight_field_1, highlight_field_2, ...",  
     "highlightPreTag": "pre_tag",  
     "highlightPostTag": "post_tag",  
     "minimumCoverage": # (% of index that must be covered to declare query successful; default 100),  
     "orderby": "orderby_expression",  
     "queryType": "simple" (default) | "full",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "sessionId" : "session_id",
     "skip": # (default 0),  
     "top": #  
   }  

部分搜索响应的延续

有时Azure 认知搜索无法在单个搜索响应中返回所有请求的结果。 这可能会因不同的原因发生,例如,查询请求的文档过多时,不指定$top或为太大$top指定值。 在这种情况下,Azure 认知搜索将在响应正文中包含@odata.nextLink批注,如果它是 POST 请求,则也会@search.nextPageParameters包含注释。 可使用这些批注的值表述另一个搜索请求,以获取搜索响应的下一部分。 这称为原始搜索请求的延续,并且这些批注通常称为延续标记。 有关这些批注的语法及其出现在响应正文中的位置的详细信息,请参阅下面的响应示例中的示例。

Azure 认知搜索可能返回延续令牌的原因特定于实现且可能会更改。 可靠的客户端应始终准备好处理返回的文档少于预期并且包含延续标记以继续检索文档的情况。 另请注意,必须使用与原始请求相同的 HTTP 方法才能继续。 例如,如果已发送 GET 请求,则发送的任何延续请求都必须也使用 GET(对于 POST 同样如此)。

注意

@odata.nextLink@search.nextPageParameters目的是保护服务免受请求过多结果的查询,而不是提供用于分页的一般机制。 如果要分页浏览结果,请使用$top和$skip。 例如,如果想要大小为 10 的页面,则第一个请求应具有 $top=10 和 $skip=0,第二个请求应具有 $top=10 和 $skip=10,第三个请求应具有 $top=10 和 $skip=20 等。

查询参数

使用 GET 调用 URL 时,查询接受 URL 上的多个参数,并在使用 POST 调用时作为请求正文中的 JSON 属性。 在 GET 和 POST 之间,某些参数的语法稍有不同。 这些差异如下所述。

名称 类型 说明
api-version 字符串 必需。 用于请求的 REST API 的版本。 有关受支持的版本列表,请参阅 API 版本。 对于此操作,无论使用 GET 还是 POST 调用 搜索文档 ,API 版本都指定为 URI 参数。
$count 布尔值 可选。 有效值为“true”或“false”。 默认值为“false”。 使用 POST 调用时,此参数命名为计数,而不是$count。 指定是否要获取结果的总计数。 这是与搜索和$filter参数匹配的所有文档计数,忽略$top和$skip。 将此值设置为“true”可能会降低性能。 如果索引稳定,但将在主动添加、更新或删除的任何文档下或过度报告,则计数准确。 如果只想获取不包含任何文档的计数,可以使用 $top=0。
facet 字符串 可选。 要分面的字段。 字符串可能包含用于自定义分面的参数,以逗号分隔的名称值对表示。 使用 POST 调用时,此参数称为 facet 而不是 facet。

有效值为“count”、“sort”、“values”、“interval”和“timeoffset”。

“count”是分面词的最大数目;默认值为 10。 术语数没有上限,但较高的值会降低性能,尤其是在分面字段包含大量唯一术语时。 例如,“facet=category,count:5”获取分面结果中的前五个类别。 如果 count 参数小于唯一术语的数目,则结果可能不准确。 这由分面查询分布在各个分片上的方式所导致。 可以将计数设置为零或设置为大于或等于可分面字段中唯一值数的值,以获取所有分片的准确计数。 权衡会增加延迟。

“sort”可以设置为“count”、“-count”、“value”、“-value”。 使用计数按计数对降序排序。 使用 -count 按计数对升序排序。 使用值按值对升序排序。 使用 -value 按值 ((例如,“facet=category,count:3,sort:count”)按值降序,按每个城市名称) 的文档数降序获取分面结果中的前三个类别。 如果前三个类别是预算、汽车旅馆和奢侈品,并且预算命中 5 次、汽车旅馆命中 6 次、奢侈品命中 4 次,则存储桶的顺序将为汽车旅馆、预算、奢侈品。 对于 -value,“facet=rating,sort:-value”会根据值 (降序生成所有可能的分级的存储桶,例如,如果评级从 1 到 5,则无论每个分级) 匹配多少个文档,存储桶都将排序为 5、4、3、2、1。

“values”可以设置为管道分隔的数字或 Edm.DateTimeOffset 值,指定一组动态分面条目值,例如“facet=baseRate, (values:10 |20 英寸生成三个存储桶:一个用于基速率 0 到但不包括 10,一个用于 10 个,但不包括 20 个,一个用于 20 个和更高的) 。 字符串“facet=lastRenovationDate,values:2010-02-01T00:00:00Z”生成两个存储桶:一个用于 2010 年 2 月 1 日之前装修的酒店,一个用于 2010 年 2 月 1 日或更高版本装修的酒店。 这些值必须按顺序、升序列出才能获取预期结果。

“interval”是数字或分钟、小时、日、周、月、季度、日期时间值的整数间隔大于 0。 例如,“facet=baseRate,interval:100”基于大小为 100 的基速率范围生成存储桶。 如果基本费率均在 60 美元到 600 美元之间,则 0-100、100-200、200-300、300-400、400-500 和 500-600 的存储桶。 字符串“facet=lastRenovationDate,interval:year”为每年生成一个桶,当酒店经过翻新时。

“timeoffset”可以设置为 ([+-]hh:mm、[+-]hhmm 或 [+-]hh) 。 如果使用,则必须将 timeoffset 参数与间隔选项组合在一起,并且仅当应用于 Edm.DateTimeOffset 类型的字段时。 该值指定在设置时间边界时要考虑的 UTC 时间偏移量。 例如:“facet=lastRenovationDate,interval:day,timeoffset:-01:00”使用以 01:00:00 UTC (午夜开始的日边界) 。

计数和排序可以在同一方面规范中组合,但它们不能与间隔或值组合在一起,不能将间隔和值组合在一起。

如果未指定 timeoffset,则基于 UTC 时间计算日期时间的间隔分面。 例如:对于“facet=lastRenovationDate,interval:day”,日边界从 00:00:00 UTC 开始。
$filter 字符串 可选。 使用标准 OData 语法的结构化搜索表达式。 只能在筛选器中使用可筛选字段。 使用 POST 调用时,此参数命名为筛选器,而不是$filter。 有关Azure 认知搜索支持的 OData 表达式语法子集的详细信息,请参阅 Azure 认知搜索 的 OData 表达式语法。
highlight 字符串 可选。 用于命中突出显示的逗号分隔的字段名称集。 只能使用可搜索字段进行命中突出显示。 默认情况下,Azure 认知搜索每个字段最多返回 5 个突出显示。 该限制是按字段配置的,方法是在字段名称后面追加“-<max# 突出显示>”。 例如,“highlight=title-3,description-10”从标题字段返回最多 3 个突出显示的命中,以及说明字段中最多 10 次命中。 最大突出显示数必须是介于 1 和 1000(含 1)之间的整数。
highlightPostTag 字符串 可选。 默认为 "</em>"。 追加到突出显示的术语的字符串标记。 必须使用 highlightPreTag 进行设置。 URL 中的保留字符必须采用百分比编码形式(例如,使用 %23 而不是 #)。
highlightPreTag 字符串 可选。 默认为 "</em>"。 一个字符串标记,该标记前面追加到突出显示的术语。 必须使用 highlightPostTag 进行设置。 URL 中的保留字符必须采用百分比编码形式(例如,使用 %23 而不是 #)。
minimumCoverage integer 可选。 有效值为介于 0 和 100 之间的数字,指示索引的百分比必须可用于为查询提供服务,然后才能将其报告为成功。 默认值为“100”。

百分之百的覆盖率意味着所有分片都响应了请求, (服务运行状况问题和维护活动都减少了覆盖) 。 在默认设置下,小于完全覆盖将返回 HTTP 状态代码 503。

如果发生 503 个错误并想要增加查询成功的可能性,尤其是针对针对一个副本配置的服务,则降低 minimumCoverage 可能很有用。 如果设置 minimumCoverage 和 Search 成功,它将返回 HTTP 200,并在响应中包含一个 @search.coverage 值,该值指示查询中包含的索引百分比。 在这种情况下,并非所有匹配的文档都保证出现在搜索结果中,但如果搜索可用性比召回更重要,那么减少覆盖率可能是可行的缓解策略。
$orderby 字符串 可选。 逗号分隔的表达式列表,结果将根据它进行排序。 使用 POST 调用时,此参数命名为 orderby,而不是$orderby。 每个表达式可以是字段名称,也可以是对 geo.distance () 函数的调用。 每个表达式后跟“asc”以指示升序,“desc”表示降序。 如果排序字段中存在 null 值,则 null 以升序显示,最后以降序显示。 默认值为升序。 排序的依据将是文档的匹配分数。 如果未指定$orderby,则默认排序顺序按文档匹配分数降序。 $orderby有 32 个子句的限制。
queryType 字符串 可选。 有效值为“simple”或“full”。 默认为“simple”。

“simple”使用允许符号(如+*"")的简单查询语法解释查询字符串。 默认情况下,查询在所有可搜索字段 (或搜索字段) 中指示的所有可搜索字段进行评估。

“full”使用 完整的 Lucene 查询语法解释查询 字符串,该语法允许字段特定的搜索和加权搜索。 不支持使用 Lucene 查询语言的范围查询,但支持提供类似功能的 $filter。
scoringParameter 字符串 可选。 指示评分函数中定义的每个参数的值 (,例如 referencePointParameter) 使用格式“name-value1,value2,...”使用 POST 调用时,此参数命名为 scoringParameters,而不是 scoringParameter。 此外,将它指定为字符串的 JSON 数组,其中每个字符串都是单独的名称值对。

对于包含函数的计分配置文件,请使用字符将函数与其输入列表 - 分开。 例如,名为 "mylocation" “&scoringParameter=mylocation--122.2,44.8”的函数。 第一个短划线将函数名称与值列表中分隔开来,而第二个短划线是此示例中第一个值 (经度的一部分) 。

对于可包含逗号的标记提升等评分参数,可以使用单引号转义列表中的任何此类值。 如果值本身包含单引号,可通过双重单引号转义它们。 假设你调用 "mytag" 了一个标记提升参数,并且想要提升标记值“Hello,O'Brien”和“Smith”,查询字符串选项将是“&scoringParameter=mytag-'Hello,O''Brien',Smith”。 只有包含逗号的值才需要引号。
scoringProfile 字符串 可选。 用于为匹配的文档评估匹配分数以便对结果进行排序的评分配置文件的名称。
scoringStatistics 字符串 可选。 有效值为“local”或“global”。 默认为“local”。 指定是计算评分统计信息(例如文档频率、全局 (跨所有分片) 进行更一致的评分),还是在本地 (当前分片) ,以降低延迟。 请参阅Azure 认知搜索中的评分统计信息。 对于使用 模糊搜索 (“~”) 的术语,将始终在本地计算计分统计信息。
search 字符串 可选。 要搜索的文本。 默认情况下搜索所有可搜索字段,除非指定 searchFields。 在索引中,可搜索字段中的文本已标记化,因此多个字词可以通过空格分隔 (例如:“search=hello world”) 。 若要匹配任何字词,请使用 *(这对布尔筛选器查询可能很有用)。 忽略此参数与将其设置为 * 具有相同的效果。 有关搜索语法的详细信息,请参阅 简单查询语法

查询可搜索字段时,结果有时可能出人意料。 标记器包含用于处理英语文本中常见情况(如撇号、数字中的逗号等)的逻辑。 例如,“search=123,456”将匹配单个字词“123,456”,而不是单个字词“123”和“456”,因为逗号用作英语中大量数字的千分隔符。 出于此原因,我们建议使用空格而不是标点符号来分隔搜索参数中的字词。
searchMode 字符串 可选。 有效值为“any”或“all”默认值为“any”。 指定要将文档算作匹配项,是必须匹配任一搜索词还是必须匹配所有搜索词。
searchFields 字符串 可选。 要对指定文本搜索的逗号分隔的字段名称列表。 目标字段必须在索引架构中标记为可搜索。
$select 字符串 可选。 要包含在结果集中的逗号分隔字段的列表。 只有标记为可检索的字段才能包含在此子句中。 如果未指定或设置为 *,会在投影中包含架构中标记为可检索的所有字段。 使用 POST 调用时,此参数将命名为 select 而不是 $select。
sessionID 字符串 可选。 使用 sessionId 有助于提高具有多个副本的搜索服务的相关性分数一致性。 在多副本配置中,对于同一查询,单个文档的相关性分数之间可能略有差异。 提供会话 ID 后,该服务将尽最大努力将给定请求路由到该会话的同一副本。 谨慎地重复使用同一会话 ID 值可能会干扰跨副本的请求负载均衡,并严重影响搜索服务的性能。 用作 sessionId 的值不能以“_”字符开头。 如果服务没有任何副本,则此参数不会影响性能或评分一致性。
$skip integer 可选。 要跳过的搜索结果数。 使用 POST 调用时,此参数将命名为 skip,而不是$skip。 此值不能大于 100,000。 如果需要按顺序扫描文档,但由于此限制而无法使用$skip,请考虑对 (索引中的每个文档具有唯一值的字段使用$orderby,例如,使用范围查询) 和$filter。
$top integer 可选。 要检索的搜索结果数。 这默认为 50。 使用 POST 调用时,此参数将命名为 top 而不是 $top。 如果指定的值大于 1000 且结果超过 1000 个,则只返回前 1000 个结果,以及指向下一页结果的链接 (以下示例) 。@odata.nextLink

Azure 认知搜索使用服务器端分页来防止查询一次检索过多的文档。 默认页面大小为 50,最大页面大小为 1000。 这意味着,如果未指定$top,则搜索 文档 最多返回 50 个结果。 如果结果超过 50 个,响应包含检索最多 50 个结果的下一页的信息, (请参阅以下示例中的 “@odata.nextLink”和“@search.nextPageParameters”。 同样,如果为$top指定大于 1000 的值并且结果超过 1000 个,则只返回前 1000 个结果,以及检索最多 1000 个结果的下一页的信息。

响应

对于成功的响应,返回“状态代码:200 正常”。

  {
    "@odata.count": # (if $count=true was provided in the query),
    "@search.coverage": # (if minimumCoverage was provided in the query),
    "@search.facets": { (if faceting was specified in the query)
      "facet_field": [
        {
          "value": facet_entry_value (for non-range facets),
          "from": facet_entry_value (for range facets),
          "to": facet_entry_value (for range facets),
          "count": number_of_documents
        }
      ],
      ...
    },
    "@search.nextPageParameters": { (request body to fetch the next page of results if not all results could be returned in this response and Search was called with POST)
      "count": ... (value from request body if present),
      "facets": ... (value from request body if present),
      "filter": ... (value from request body if present),
      "highlight": ... (value from request body if present),
      "highlightPreTag": ... (value from request body if present),
      "highlightPostTag": ... (value from request body if present),
      "minimumCoverage": ... (value from request body if present),
      "orderby": ... (value from request body if present),
      "scoringParameters": ... (value from request body if present),
      "scoringProfile": ... (value from request body if present),
      "scoringStatistics": ... (value from request body if present),
      "search": ... (value from request body if present),
      "searchFields": ... (value from request body if present),
      "searchMode": ... (value from request body if present),
      "select": ... (value from request body if present),
      "sessionId" : ... (value from request body if present),
      "skip": ... (page size plus value from request body if present),
      "top": ... (value from request body if present minus page size),
    },
    "value": [
      {
        "@search.score": document_score (if a text query was provided),
        "@search.highlights": {
          field_name: [ subset of text, ... ],
          ...
        },
        "@search.features": {
          "field_name": {
            "uniqueTokenMatches": feature_score,
            "similarityScore": feature_score,
            "termFrequency": feature_score,
          },
          ...
        },
        key_field_name: document_key,
        field_name: field_value (retrievable fields or specified projection),
        ...
      },
      ...
    ],
    "@odata.nextLink": (URL to fetch the next page of results if not all results could be returned in this response; Applies to both GET and POST)
  }

示例

可以在 Azure 认知搜索 的 OData 表达式语法中找到其他示例。

  1. 搜索按日期降序排序的索引:

    GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "orderby": "LastRenovationDate desc"
        }  
    
  2. 在分面搜索中,搜索索引并检索类别、分级、标记以及特定范围内 baseRate 的项目。

    GET /indexes/hotels/docs?search=*&facet=Category&facet=Rating&facet=Tags&facet=Rooms/BaseRate,values:80|150|220&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ]  
        }  
    

    请注意,最后一个分面位于子字段上。 分面计算父文档 (Hotels) 而不是中间子文档 (会议室) ,因此响应将确定每个价格存储桶中具有任何房间的酒店数。

  3. 使用筛选器,在用户选择“评分 3”和类别“Motel”后缩小先前分面查询结果的范围。

    GET /indexes/hotels/docs?search=*&facet=tags&facet=Rooms/BaseRate,values:80|150|220&$filter=Rating eq 3 and Category eq 'Motel'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
          "filter": "Rating eq 3 and Category eq 'Motel'"  
        }  
    
  4. 在分面搜索中,对查询中返回的唯一字词设置上限。 默认值为 10,但你可以对方面特性使用 count 参数来增大或减小此值。 此示例返回城市的各个方面,限制为 5。

    GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "test",  
          "facets": [ "Address/City,count:5" ]  
        }  
    
  5. 在特定字段(例如,语言字段)中搜索索引:

    GET /indexes/hotels/docs?search=hôtel&searchFields=Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hôtel",  
          "searchFields": "Description_fr"
        }  
    
  6. 在多个字段上搜索索引。 例如,可使用多种语言存储和查询可搜索的字段,全都在同一索引内进行。 如果英语和法语说明共存于同一个文档中,则可在查询结果中返回任意或全部查询结果:

    GET /indexes/hotels/docs?search=hotel&searchFields=Description,Description_fr&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "searchFields": "Description, Description_fr"
        }  
    

    一次只能查询索引。 不要为每个语言创建多个索引,除非计划一次查询一个索引。

  7. 分页 - 获取 (页大小为 10) 的项目的第一页:

    GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 0,  
          "top": 10  
        }  
    
  8. 分页 - 获取第二页 (页面大小为 10) :

    GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "skip": 10,  
          "top": 10  
        }  
    
  9. 检索特定的字段集:

    GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "*",  
          "select": "HotelName, Description"
        }  
    
  10. 检索与特定筛选器表达式匹配的文档:

    GET /indexes/hotels/docs?$filter=(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
        }  
    
  11. 搜索索引并返回命中突出显示的片段:

    GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "highlight": "Description"  
        }  
    
  12. 搜索索引并返回按距离引用位置从近到远顺序排序的文档:

    GET /indexes/hotels/docs?search=something&$orderby=geo.distance(Location, geography'POINT(-122.12315 47.88121)')&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
        }  
    
  13. 假设有一个名为“geo”的评分配置文件,其中包含两个距离评分函数,一个定义了名为“currentLocation”的参数,另一个定义了名为“lastLocation”的参数,于是搜索索引:

    GET /indexes/hotels/docs?search=something&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&scoringParameter=lastLocation--121.499,44.2113&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "something",  
          "scoringProfile": "geo",  
          "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
        }  
    
  14. 使用简单的查询语法在索引中查找文档。 此查询返回酒店,其中可搜索字段包含字词“舒适度”和“位置”,但不包含“汽车旅馆”:

    Get /indexes/hotels/docs?search=comfort +location –motel&searchMode=all&api-version=22020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "comfort +location -motel",  
          "searchMode": "all"  
        }  
    

    提示

    使用 searchMode=all 将覆盖 searchMode=any 的默认值,并确保 -motel 表示“AND NOT”而不是“OR NOT”。 如果没有 searchMode=all,将获取“OR NOT”,从而展开而不是限制搜索结果,这对某些用户来说可能违反语感。

  15. 使用 Lucene 查询语法 查找索引中的文档) 。 此查询返回酒店,其中类别字段包含字词“budget”和所有包含短语“recently renovated”的可搜索字段。 包含短语“recently renovated”的文档作为字词提升值 (3) 的结果排名更高

    GET /indexes/hotels/docs?search=Category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2020-06-30&querytype=full` 
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
         "search": "Category:budget AND \"recently renovated\"^3",  
          "queryType": "full",  
          "searchMode": "all"  
    }  
    
  16. 在索引中查找文档,同时倾向于在较低延迟的情况下进行一致的评分。 此查询将计算整个索引的文档频率,并尽最大努力为同一“会话”内的所有查询设定相同的副本,这有助于生成稳定且可重现的排名。

    GET /indexes/hotels/docs?search=hotel&sessionId=mySessionId&scoringStatistics=global&api-version=2020-06-30
    
    POST /indexes/hotels/docs/search?api-version=2020-06-30
        {  
          "search": "hotel",  
          "sessionId": "mySessionId",
          "scoringStatistics" :"global"
        }  
    

请参阅