Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
混合搜索是为全文查询和矢量查询配置的单个查询请求。 它针对包含可搜索、纯文本内容和生成的嵌入的搜索索引执行。 出于查询目的,混合搜索:
- 是包含 `
search` 和 `vectors` 查询参数的单个查询请求。 - 并行执行全文搜索和矢量搜索。
- 使用 倒数排名融合(RRF)来合并每个查询的结果。
本文将解释混合搜索的概念、优势和局限性。 末尾的链接提供使用说明和后续步骤。 还可以观看 嵌入式视频 ,了解混合检索如何为高质量的生成搜索应用程序做出贡献。
混合搜索的工作原理是什么?
在搜索索引中,包含嵌入的矢量字段与文本字段和数字字段共存,使你能够构建同时执行的混合查询。 混合查询利用现有的基于文本的功能,例如筛选、分面、排序、计分配置文件和文本字段的 语义排名 ,同时针对单个搜索请求中的向量执行相似性搜索。
混合搜索将全文查询和矢量查询的结果结合在一起,这两种查询使用不同的排序函数:对于文本使用 BM25,对于矢量使用分层导航小世界(HNSW)和详尽 K 近邻(eKNN)。 RRF 算法合并结果。 查询响应仅提供一个结果集,使用 RRF 对统一结果进行排名。
混合查询的结构
混合搜索依赖于搜索索引,其中包含各种 数据类型的字段,包括纯文本和数字、地理坐标(如果需要地理空间搜索)和矢量以数学方式表示文本块。 除了纯文本客户端交互(例如自动完成和建议)之外,可以将 Azure AI 搜索中几乎所有的查询功能与矢量查询一起使用。
具有代表性的混合查询可能如下所示。 为简洁起见,矢量查询具有占位符值。
POST https://{{searchServiceName}}.search.azure.cn/indexes/hotels-vector-quickstart/docs/search?api-version=2025-09-01
content-type: application/JSON
{
"count": true,
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",
"filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
"vectorFilterMode": "postFilter",
"facets": [ "Address/StateProvince"],
"vectorQueries": [
{
"kind": "vector",
"vector": [ <array of embeddings> ]
"k": 50,
"fields": "DescriptionVector",
"exhaustive": true,
"oversampling": 20
},
{
"kind": "vector",
"vector": [ <array of embeddings> ]
"k": 50,
"fields": "Description_frVector",
"exhaustive": false,
"oversampling": 10
}
],
"skip": 0,
"top": 10,
"queryType": "semantic",
"queryLanguage": "en-us",
"semanticConfiguration": "my-semantic-config"
}
要点:
-
search指定单个全文搜索查询。 -
vectorQueries指定矢量查询,可以是多个矢量查询,目标是多个向量字段。 如果嵌入空间包括多语言内容,矢量查询无需语言分析器或翻译即可找到匹配项。 如果您在使用语义排序算法,建议将k设置为50,以最大化其输入。 -
select指定要在结果中返回的字段,如果向用户显示这些字段或将其发送到大型语言模型(LLM),则应为人工可读的文本字段。 -
filters可以指定地理空间搜索或其他包含和排除条件,例如是否包括停车。 此示例中的地理空间查询查找了华盛顿特区 300 公里半径范围内的酒店。可以在查询处理的开头或末尾应用筛选器。 如果使用语义排名器,可能需要将筛选后作为最后一步,但应测试以确认哪种行为最适合查询。 -
facets可用于针对混合查询返回的结果计算 facet 存储桶。 -
queryType=semantic调用 语义排名器,应用计算机读取理解来显示更相关的搜索结果。 语义排名是可选的。 如果不使用此功能,请删除混合查询的最后三行。
筛选器和分面过滤器针对索引中与全文搜索中的倒排索引和矢量搜索中的矢量索引不同的特定数据结构。 因此,当执行筛选器和 facet 操作时,搜索引擎可将操作结果应用于响应中的混合搜索结果。
请注意,查询中并没有 orderby。 显式排序顺序会覆盖相关性排名的结果,因此,如果你需要获得相似性和 BM25 相关性,请在查询中省略排序。
来自查询的响应可能类似于以下 JSON。
{
"@odata.count": 3,
"@search.facets": {
"Address/StateProvince": [
{
"count": 1,
"value": "NY"
},
{
"count": 1,
"value": "VA"
}
]
},
"value": [
{
"@search.score": 0.03333333507180214,
"@search.rerankerScore": 2.5229012966156006,
"HotelId": "49",
"HotelName": "Swirling Currents Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Address": {
"City": "Arlington",
"StateProvince": "VA"
}
},
{
"@search.score": 0.032522473484277725,
"@search.rerankerScore": 2.111117362976074,
"HotelId": "48",
"HotelName": "Nordick's Valley Motel",
"Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer. Hiking? Wine Tasting? Exploring the caverns? It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
"Category": "Boutique",
"Address": {
"City": "Washington D.C.",
"StateProvince": null
}
}
]
}