在 Azure AI 搜索中查询
Azure AI 搜索支持用于各种场景(从自由格式文本搜索到高度指定的查询模式,还有矢量搜索)的查询构造。 所有查询都在存储可搜索内容的搜索索引上执行。
查询类型
查询表单 | 可搜索内容 | 说明 |
---|---|---|
全文搜索 | 标记化术语的倒排索引。 | 全文查询会循环访问为快速扫描而构建的倒排索引,并可能在任何字段中、在任意数量的搜索文档中找到匹配项。 对文本进行分析和标记,以便进行全文搜索。 |
矢量搜索 | 生成的嵌入的矢量索引。 | 矢量查询循环访问搜索索引中的矢量字段。 |
混合搜索 | 上述所有内容,在单个搜索索引中。 | 在单个查询请求中合并文本搜索和矢量搜索。 文本搜索适用于“可搜索”和“可筛选”字段中的纯文本内容。 矢量搜索适用于矢量字段中的内容。 |
其他 | 纯文本和字母数字内容。 | 原始内容,从源文档逐字提取,支持筛选器和模式匹配查询(如地理空间搜索、模糊搜索和字段搜索)。 |
本文重点介绍最后一类查询:处理纯文本和字母数字内容的查询,从原始源文档中完整提取,用于筛选器和其他专用查询表单。
自动完成和建议的查询
自动完成或建议的结果是 search
的替代方案,它们基于键入时搜索体验中的部分字符串输入(每个字符之后)来触发连续查询请求。 可同时或单独使用 autocomplete
和 suggestions
参数,但不能将其与 search
一起使用。 已完成的搜索词和建议的查询都派生自索引内容。 引擎永远不会返回索引中不存在的字符串或建议。 有关详细信息,请参阅自动完成 (REST API) 和建议 (REST API)。
筛选器搜索
筛选器广泛应用于基于 Azure AI 搜索的应用。 在应用程序页面上,筛选器通常被可视化为用户定向筛选的链接导航结构中的平面。 筛选器还在内部用于公开索引内容的切片。 例如,如果索引包含英语和法语的字段,则你可以使用针对产品类别或语言的筛选器初始化搜索页面。
可能需要使用筛选器来调用专用查询窗体,如下表所述。 可以使用具有未指定搜索 (search=*
) 的筛选器或具有查询字符串(其中包括搜索词、短语、运算符和模式)的筛选器。
筛选场景 | 说明 |
---|---|
范围筛选器 | 在 Azure AI 搜索中,范围查询是使用筛选器参数生成的。 有关详细信息和示例,请参阅范围筛选器示例。 |
多面导航 | 在分面导航树中,用户可以选择分面。 在具备筛选器的情况下,每次单击都会缩小搜索结果的范围。 每个分面都具备一个筛选器,用于排除与分面所提供的条件不再符合的文档。 |
注意
查询处理过程中不会分析筛选器表达式中使用的文本。 文本输入假定为逐字区分大小写的字符模式,该模式在匹配时要么成功要么失败。 筛选器表达式是使用 OData 语法构造的,并传入索引中的所有可筛选字段中的 filter
参数中。 有关详细信息,请参阅 Azure AI 搜索中的筛选器。
地理空间搜索
地理空间搜索可匹配位置的经度和纬度坐标,提供“查找我附近的位置”或基于地图的搜索体验。 在 Azure AI 搜索中,可以按照以下步骤实现地理空间搜索:
- 定义这些类型之一的可筛选字段:Edm.GeographyPoint、Collection(Edm.GeographyPoint、Edm.GeographyPolygon)。
- 验证传入的文档是否包含相应的坐标。
- 索引编制完成后,生成可使用筛选器和地理空间函数的查询。
地理空间搜索使用公里作为距离单位。 坐标用以下格式指定:(longitude, latitude
。
下面是地理空间搜索筛选器的示例。 此筛选器在搜索索引中查找其他 Location
字段,这些字段的坐标在地理点(在本示例中为华盛顿特区)300 公里半径内。 它在结果中返回地址信息,并包括一个可选的 facets
子句,用于基于位置的自导航。
POST https://{{searchServiceName}}.search.azure.cn/indexes/hotels-vector-quickstart/docs/search?api-version=2024-07-01
{
"count": true,
"search": "*",
"filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
"facets": [ "Address/StateProvince"],
"select": "HotelId, HotelName, Address/StreetAddress, Address/City, Address/StateProvince",
"top": 7
}
有关详细信息和示例,请参阅地理空间搜索示例。
文档查找
与前面描述的查询窗体相比,文档查找按 ID 检索单个搜索文档,没有相应的索引搜索或扫描。 仅请求并返回一个文档。 当用户在搜索结果中选择项目时,检索文档并使用字段填充详细信息页是典型的响应,文档查找是支持这一点的操作。
高级搜索:模糊、通配符、邻近、正则表达式
高级查询窗体取决于触发特定查询行为的 Full Lucene 分析程序和运算符。
查询类型 | 使用情况 | 示例和详细信息 |
---|---|---|
字段化搜索 | search 参数,queryType=full |
针对单个字段生成复合查询表达式。 字段化搜索示例 |
模糊搜索 | search 参数,queryType=full |
匹配具有类似构造或拼写方式的字词。 模糊搜索示例 |
邻近搜索 | search 参数,queryType=full |
查找在文档中相互靠近的字词。 邻近搜索示例 |
术语提升 | search 参数,queryType=full |
如果某个文档包含提升的字词(相对于其他未提升的字词),则提高其排名。 字词提升示例 |
正则表达式搜索 | search 参数,queryType=full |
基于正则表达式的内容进行匹配。 正则表达式示例 |
通配符或前缀搜索 | search 参数,使用 *~ 或 ? ,queryType=full |
基于前缀和波浪符 (~ ) 或单个字符 (? ) 进行匹配。 通配符搜索示例 |
后续步骤
如需进一步了解查询实现,请查看每个语法的示例。 如果你不熟悉全文搜索,那么请详细了解查询引擎的用途,这可能也是一个不错的选择。