你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB for NoSQL 中的混合搜索(预览版)
Azure Cosmos DB for NoSQL 现支持强大的混合搜索功能,该功能使用倒数排名融合 (RRF) 函数将矢量搜索与全文搜索评分 (BM25) 相结合。
注意
全文和混合搜索处于早期预览状态,目前可能尚未在部分区域中提供。
什么是混合搜索?
混合搜索利用基于矢量和基于关键字的传统搜索方法的优势来提供更相关和更准确的搜索结果。 可以轻松地在 Azure Cosmos DB for NoSQL 中执行混合搜索,因为能够在同一文档中存储元数据和矢量。
Azure Cosmos DB for NoSQL 中的混合搜索集成了两种不同的搜索方法:
- 矢量搜索:利用机器学习模型了解查询和文档的语义含义。 这样可以获得更微妙且上下文感知的搜索结果,对于传统关键字搜索可能无法满足的复杂查询特别有用。
- 全文搜索 (BM25):一种成熟的算法,根据字词的存在和频率对文档进行评分。 BM25 对于直接关键字搜索特别有效,为搜索相关性提供可靠的基线。
然后,使用倒数排名融合 (RRF) 函数合并矢量搜索和全文搜索的结果。 RRF 是一种排名聚合方法,用于合并来自多个搜索算法的排名,以生成单个统一排名。 这可确保最终搜索结果从这两种搜索方法的优势中受益,并提供了多种好处。
- 增强相关性:通过将语义理解与关键字匹配相结合,混合搜索为各种查询提供了更相关的结果。
- 改进准确度:RRF 函数可确保确定这两种搜索方法中最相关结果的优先级。
- 多功能性:适用于各种用例,包括检索增强生成 (RAG),以改进基于你自己的数据的 LLM 生成的响应。
如何使用混合搜索
- 启用 Azure Cosmos DB for NoSQL 中的矢量搜索功能。
- 启用针对 NoSQL 的全文和混合搜索预览功能。
- 使用矢量策略、全文策略、矢量索引和全文索引创建容器。
- 插入带有文本和矢量属性的数据。
- 针对数据运行混合查询。
为混合搜索配置策略和索引
重要
目前,矢量策略和矢量索引在创建后是不可变的。 若要进行更改,请创建一个新集合。
示例矢量策略
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
示例全文策略
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
包含全文索引和矢量索引的示例索引策略
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
混合搜索查询
可以在包含 VectorDistance
函数和 FullTextScore
的 ORDER BY RANK
子句中利用 RRF
系统函数来执行混合搜索查询。 例如,用于查找前 k 个最相关结果的参数化查询如下所示:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
假设有一个文档,每个文档都有矢量嵌入存储在属性 c.vector
中,文本数据包含在属性 c.text 中。 若要使用混合搜索获取 10 个最相关的文档,可以将查询编写为:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])