Azure 认知搜索中的查询

Azure 认知搜索支持用于各种场景(从自由格式文本搜索到高度指定的查询模式,还有矢量搜索)的查询构造。 所有查询都在存储可搜索内容的搜索索引上执行。

查询类型

查询表单 可搜索内容 说明
全文搜索 标记化术语的倒排索引。 全文查询会循环访问为快速扫描而构建的倒排索引,并可能在任何字段中、在任意数量的搜索文档中找到匹配项。 对文本进行分析和标记,以便进行全文搜索。
其他 纯文本和字母数字内容。 原始内容,从源文档逐字提取,支持筛选器和模式匹配查询(如地理空间搜索、模糊搜索和字段搜索)。

本文重点介绍最后一类查询:处理纯文本和字母数字内容的查询,从原始源文档中完整提取,用于筛选器和其他专用查询表单。

自动完成和建议的查询

自动完成或建议的结果search 的替代方案,它们基于键入时搜索体验中的部分字符串输入(每个字符之后)来触发连续查询请求。 可同时或单独使用 autocompletesuggestions 参数,但不能将其与 search 一起使用。 已完成的搜索词和建议的查询都派生自索引内容。 引擎永远不会返回索引中不存在的字符串或建议。 有关详细信息,请参阅自动完成 (REST API)建议 (REST API)

筛选器广泛应用于基于认知搜索的应用。 在应用程序页面上,筛选器通常被可视化为用户定向筛选的链接导航结构中的平面。 筛选器还在内部用于公开索引内容的切片。 例如,如果索引包含英语和法语的字段,则你可以使用针对产品类别或语言的筛选器初始化搜索页面。

可能需要使用筛选器来调用专用查询窗体,如下表所述。 可以使用具有未指定搜索 (search=*) 的筛选器或具有查询字符串(其中包括搜索词、短语、运算符和模式)的筛选器。

筛选场景 说明
范围筛选器 在 Azure 认知搜索中,范围查询是使用筛选器参数生成的。 有关详细信息和示例,请参阅范围筛选器示例
多面导航 分面导航树中,用户可以选择分面。 在具备筛选器的情况下,每次单击都会缩小搜索结果的范围。 每个分面都具备一个筛选器,用于排除与分面所提供的条件不再符合的文档。

注意

查询处理过程中不会分析筛选器表达式中使用的文本。 文本输入假定为逐字区分大小写的字符模式,该模式在匹配时要么成功要么失败。 筛选器表达式是使用 OData 语法构造的,并传入索引中的所有可筛选字段中的 filter 参数中。 有关详细信息,请参阅 Azure 认知搜索中的筛选器

地理空间搜索可匹配位置的经度和纬度坐标,提供“查找我附近的位置”或基于地图的搜索体验。 在 Azure 认知搜索中,可以按照以下步骤实现地理空间搜索:

地理空间搜索使用公里作为距离单位。 坐标用以下格式指定:(longitude, latitude

下面是地理空间搜索筛选器的示例。 此筛选器在搜索索引中查找其他 Location 字段,这些字段的坐标在地理点(在本示例中为华盛顿特区)300 公里半径内。 它在结果中返回地址信息,并包括一个可选的 facets 子句,用于基于位置的自导航。

POST https://{{searchServiceName}}.search.azure.cn/indexes/hotels-vector-quickstart/docs/search?api-version=2023-07-01-Preview
{
    "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 基于前缀和波浪符 (~) 或单个字符 (?) 进行匹配。
通配符搜索示例

后续步骤

如需进一步了解查询实现,请查看每个语法的示例。 如果你不熟悉全文搜索,那么请详细了解查询引擎的用途,这可能也是一个不错的选择。