你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
(Azure AI 搜索 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,请将“搜索”操作添加为 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 AI 搜索的 OData 表达式语法。
URI 参数
参数 | 说明 |
---|---|
[服务名称] | 必需。 将此设置为搜索服务的唯一用户定义名称。 |
[index name]/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 AI 搜索 .NET 客户端库时,无需 URL 编码。
请求标头
下表介绍必需和可选的请求标头。
字段 | 说明 |
---|---|
Content-Type | 必需。 将此设置为“application/json” |
api-key | 如果使用 Azure 角色 并且请求中提供了持有者令牌,则为可选,否则需要密钥。 api-key 是系统生成的唯一字符串,用于对搜索服务的请求进行身份验证。 针对文档集合的查询请求可以将管理密钥或查询密钥指定为 API 密钥。 查询键用于对文档集合执行只读操作。 有关详细信息 ,请参阅使用密钥身份验证连接到 Azure AI 搜索 。 |
请求正文
对于 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 AI 搜索无法在单个搜索响应中返回所有请求的结果。 发生此情况可能有不同的原因,例如当查询由于未指定 $top
或为 $top
指定了过大的值而请求过多文档时。 在这种情况下,Azure AI 搜索在响应正文中包括 @odata.nextLink 批注,以及 @search.nextPageParameters 是否为 POST 请求。 可使用这些批注的值表述另一个搜索请求,以获取搜索响应的下一部分。 这称为原始搜索请求的延续,并且这些批注通常称为延续标记。 有关这些批注的语法及其在响应正文中的显示位置的详细信息,请参阅下面的响应中的示例。
Azure AI 搜索可能返回延续令牌的原因特定于实现,可能会发生更改。 可靠的客户端应始终准备好处理返回的文档少于预期并且包含延续标记以继续检索文档的情况。 另请注意,必须使用与原始请求相同的 HTTP 方法才能继续。 例如,如果已发送 GET 请求,则发送的任何延续请求都必须也使用 GET(对于 POST 同样如此)。
注意
和 @search.nextPageParameters 的用途@odata.nextLink是保护服务免受请求过多结果的查询,而不是为分页提供常规机制。 如果要分页查看结果,请 $top
结合使用 和 $skip
。 例如,如果想要大小为 10 的页面,则第一个请求应具有 $top=10
和 $skip=0
,第二个请求应具有 $top=10
和 $skip=10
,第三个请求应具有 $top=10
和 $skip=20
等。
查询参数
使用 GET 调用时,查询接受 URL 上的多个参数,在使用 POST 调用时接受请求正文中的 JSON 属性。 在 GET 和 POST 之间,某些参数的语法稍有不同。 下面指出了这些差异。
名称 | 类型 | 说明 |
---|---|---|
api-version | 字符串 | 必需。 用于请求的 REST API 的版本。 有关支持版本的列表,请参阅 API 版本。 对于此操作,无论使用 GET 还是 POST 调用 搜索文档 ,API 版本都指定为 URI 参数。 |
$count |
布尔值 | 可选。 有效值为“true”或“false”。 默认为“false”。 使用 POST 调用时,此参数命名为 count 而不是 $count 。 指定是否要获取结果的总计数。 这是与搜索和$filter参数匹配的所有文档计数,忽略 $top 和 $skip 。 将此值设置为“true”可能会降低性能。 如果索引稳定,则计数是准确的,但会在主动添加、更新或删除的任何文档下或多报。 如果只想获取不带任何文档的计数,可以使用 $top =0。 |
facet 或 facet | 字符串 | 可选。 指向分面依据的字段,其中字段属性为“可分面”。 使用 GET 调用时, facet 是一个字段 (facet: field1 ) 。 使用 POST 调用时,此参数将命名 facets 而不是 facet ,并且指定为数组 (facets: [field1, field2, field3] ) 。 字符串可能包含用于自定义分面的参数,以逗号分隔的名称/值对表示。
有效参数为“count”、“sort”、“values”、“interval”和“timeoffset”。 “count”是 facet 字词的最大数目;默认值为 10。 术语数没有上限,但值越高会降低性能,尤其是在分面字段包含大量唯一术语时。 例如,“facet=category,count:5”获取分面结果中的前五个类别。 如果 count 参数小于唯一项的数目,则结果可能不准确。 这由分面查询分布在各个分片上的方式所导致。 可以将计数设置为零或设置为大于或等于可分面字段中唯一值数的值,以获取所有分片的准确计数。 权衡是延迟增加。 “sort”可以设置为“count”、“-count”、“value”、“-value”。 使用 count 按计数降序排序。 使用 -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 条目值 (例如“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 参数必须与 interval 选项结合使用,并且仅当应用于类型为 Edm.DateTimeOffset 的字段时。 该值指定在设置时间边界时要考虑的 UTC 时间偏移量。 例如:“facet=lastRenovationDate,interval:day,timeoffset:-01:00”使用从 01:00:00 UTC 午夜开始 (目标时区) 的日边界。 可以在同一方面规范中组合计数和排序,但它们不能与间隔或值组合在一起,并且不能将间隔和值组合在一起。 如果未指定 timeoffset,则根据 UTC 时间计算日期时间的间隔分面。 例如:对于“facet=lastRenovationDate,interval:day”,日边界从 UTC 00:00:00 开始。 |
$filter | 字符串 | 可选。 使用标准 OData 语法的结构化搜索表达式。 筛选器中只能使用可筛选字段。 使用 POST 调用时,此参数命名为筛选器,而不是$filter。 有关 Azure AI 搜索支持的 OData 表达式 语法子集的详细信息,请参阅 Azure AI 搜索的 OData 表达式语法。 |
highlight | 字符串 | 可选。 用于命中突出显示的逗号分隔的字段名称集。 仅可搜索字段可用于命中突出显示。 默认情况下,Azure AI 搜索每个字段最多返回 5 个突出显示。 可以通过在字段名称后面追加“-<max#的突出显示>”来配置每个字段的限制。 例如,“highlight=title-3,description-10”从标题字段中返回最多 3 个突出显示的命中,从说明字段返回最多 10 次命中。 突出显示的最大数目必须是介于 1 和 1000(含 1)之间的整数。 |
highlightPostTag | 字符串 | 可选。 默认为 "</em>" 。 追加到突出显示的术语的字符串标记。 必须使用 highlightPreTag 进行设置。 URL 中的保留字符必须采用百分比编码形式(例如,使用 %23 而不是 #)。 |
highlightPreTag | 字符串 | 可选。 默认为 "</em>" 。 在突出显示的术语前面附加的字符串标记。 必须使用 highlightPostTag 进行设置。 URL 中的保留字符必须采用百分比编码形式(例如,使用 %23 而不是 #)。 |
minimumCoverage | 整型 | 可选。 有效值是介于 0 和 100 之间的数字,指示查询在报告成功之前必须可用于为查询提供服务的索引的百分比。 默认为“100”。
百分之百的覆盖率意味着所有响应请求的分片 (服务运行状况问题和维护活动都不会降低覆盖范围) 。 在默认设置下,小于完全覆盖返回 HTTP 状态代码 503。 如果发生 503 个错误,并且想要提高查询成功的可能性,尤其是针对一个副本 (replica) 配置的服务,则降低 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”使用允许符号(如 、 * 和 "" )+ 的简单查询语法来解释查询字符串。 默认情况下,查询将跨所有可搜索字段 (或 searchFields 中指示的字段进行评估,) 在每个文档中。
“full”使用 完整的 Lucene 查询语法 解释查询字符串,该语法允许特定于字段的和加权的搜索。 不支持使用 Lucene 查询语言进行范围搜索,而支持提供类似功能的 $filter。 |
scoringParameter | 字符串 | 可选。 指示使用格式“name-value1,value2,...” (评分函数(例如 referencePointParameter) )中定义的每个参数的值使用 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 AI 搜索中的评分统计信息。 对于使用 模糊搜索 (“~”) 的字词,始终在本地计算评分统计信息。 |
search | 字符串 | 可选。 要搜索的文本。 默认情况下,除非指定了 searchFields,否则将搜索所有可搜索字段。 在索引中,可搜索字段中的文本已标记化,因此多个字词可以通过空格 (分隔,例如:“search=hello world”) 。 若要匹配任何字词,请使用 * (这对布尔筛选器查询可能很有用)。 忽略此参数与将其设置为 * 具有相同的效果。 有关搜索语法的详细信息,请参阅 简单查询 语法。
查询可搜索字段时,结果有时会出人意料。 标记器包含用于处理英语文本中常见情况(如撇号、数字中的逗号等)的逻辑。 例如,“search=123,456”将匹配单个字词“123,456”,而不是单个字词“123”和“456”,因为逗号用作英语中较大数字的千位分隔符。 因此,建议使用空格而不是标点符号来分隔搜索参数中的字词。 |
searchMode | 字符串 | 可选。 有效值为“any”或“all”,默认值为“any”。 指定要将文档算作匹配项,是必须匹配任一搜索词还是必须匹配所有搜索词。 |
searchFields | 字符串 | 可选。 要对指定文本搜索的逗号分隔的字段名称列表。 目标字段必须在索引架构中标记为可搜索。 |
$select | 字符串 | 可选。 要包含在结果集中的逗号分隔字段的列表。 此子句中只能包含标记为可检索的字段。 如果未指定或设置为 * ,会在投影中包含架构中标记为可检索的所有字段。 使用 POST 调用时,此参数名为 select 而不是 $select。 |
sessionID | 字符串 | 可选。 使用 sessionId 有助于提高具有多个副本的搜索服务的相关性分数一致性。 在多副本 (replica) 配置中,同一查询的各个文档的相关性分数之间可能存在细微差异。 提供会话 ID 后,服务会尽力将给定请求路由到该会话的同一副本 (replica) 。 请注意,重复重复使用相同的会话 ID 值可能会干扰跨副本的请求负载均衡,并会对搜索服务的性能产生不利影响。 用作 sessionId 的值不能以“_”字符开头。 如果服务没有任何副本,则此参数不会影响性能或分数一致性。 |
$skip | 整型 | 可选。 要跳过的搜索结果数。 使用 POST 调用时,此参数名为 skip 而不是 $skip 。 此值不能大于 100,000。 如果需要按顺序扫描文档,但由于此限制而无法使用 $skip ,请考虑对索引中每个文档具有唯一值的字段使用 $orderby (,例如文档键,例如,) ,并改为使用范围查询$filter。 |
$top | 整型 | 可选。 要检索的搜索结果数。 这默认为 50。 使用 POST 调用时,此参数将命名为 top 而不是 $top 。 如果指定的值大于 1000 且结果超过 1000 个,则只会返回前 1000 个结果,以及指向下一页结果的链接, (以下示例) 。@odata.nextLink
Azure AI 搜索使用 服务器端分页 来防止查询一次检索过多的文档。 默认页面大小为 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 AI 搜索的 OData 表达式语法中找到更多示例。
搜索按日期降序排序的索引:
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" }
在分面搜索中,搜索索引并检索分面,以查找特定范围内具有 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" ] }
请注意,最后一个分面位于子字段上。 Facets 计算父文档 (Hotels) 而不是中间子文档 (Room) ,因此响应确定每个价格存储桶中具有任何房间的酒店数。
使用筛选器,在用户选择“评级 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'" }
在分面搜索中,对查询中返回的唯一字词设置上限。 默认值为 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" ] }
在特定字段(例如,语言字段)中搜索索引:
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" }
在多个字段上搜索索引。 例如,可使用多种语言存储和查询可搜索的字段,全都在同一索引内进行。 如果英语和法语说明在同一文档中共存,则可以返回查询结果中的任意或全部内容:
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" }
一次只能查询索引。 除非计划一次查询一个索引,否则不要为每种语言创建多个索引。
分页 - 获取项目的第一页 (页面大小为 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 }
分页 - 获取页面大小为 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 }
检索特定的字段集:
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" }
检索与特定筛选器表达式匹配的文档:
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'" }
搜索索引并返回命中突出显示的片段:
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" }
搜索索引并返回按距离引用位置从近到远顺序排序的文档:
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)')" }
搜索索引,假设有一个名为“geo”的评分配置文件,其中包含两个距离评分函数,一个定义名为“currentLocation”的参数,一个定义名为“lastLocation”的参数。 在以下示例中,“currentLocation”具有单连接号 (
-
) 分隔符。 它后跟经度和纬度坐标,其中经度为负值。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" ] }
使用简单的查询语法在索引中查找文档。 此查询返回酒店,其中可搜索字段包含字词“舒适度”和“位置”,但不包含“汽车旅馆”:
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”,从而展开而不是限制搜索结果,这对某些用户来说可能违反语感。使用 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" }
在索引中查找文档,同时偏向于一致的评分,而不考虑较低的延迟。 此查询计算整个索引中的文档频率,并尽最大努力为同一“会话”内的所有查询设定相同的副本 (replica) ,这有助于生成稳定且可重现的排名。
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" }