向量搜索技术
OpenSearch 将向量搜索实现为k-最近邻(或k-NN)搜索。k-NN 搜索在向量索引中查找距离查询点最近的 k 个邻居。为了确定邻居,您可以指定用于测量点之间距离的空间(距离函数)。
OpenSearch 支持三种不同的方法从向量索引中获取 k 个最近邻居:
-
近似搜索(近似 k-NN,或 ANN):返回近似的查询向量最近邻。通常,近似搜索算法以牺牲索引速度和搜索精度为代价,以换取性能优势,例如更低的延迟、更小的内存占用和更可伸缩的搜索。对于大多数用例,近似搜索是最佳选择。
-
精确搜索:对向量字段进行暴力、精确的 k-NN 搜索。OpenSearch 支持以下类型的精确搜索:
- 带评分脚本的精确搜索:使用评分脚本,您可以在执行最近邻搜索之前对索引应用过滤器。
- Painless 扩展:将距离函数添加为 Painless 扩展,您可以在更复杂的组合中使用它们。您可以使用此方法对索引执行暴力、精确的向量搜索,此方法也支持预过滤。
通常,对于大型数据集,您应该选择 ANN 方法,因为它具有更好的可扩展性。对于较小的数据集,如果您可能需要应用过滤器,则应选择自定义评分方法。如果您有更复杂的用例,需要将距离函数作为评分方法的一部分,则应使用 Painless 脚本方法。
近似搜索
OpenSearch 支持多种后端算法(方法)和实现这些算法的库(引擎)。它会根据选择的模式和可用内存自动选择最佳配置。有关更多信息,请参阅方法和引擎。
使用稀疏向量
神经稀疏搜索通过使用稀疏嵌入模型和倒排索引,为密集向量搜索提供了一种高效的替代方案,其性能与 BM25 相似。与需要大量内存和 CPU 资源的密集向量方法不同,稀疏搜索会创建令牌-权重对列表,并将其存储在排名特征索引中。这种方法将传统搜索的效率与神经网络的语义理解相结合。OpenSearch 支持通过摄取管道自动生成嵌入以及直接摄取稀疏向量。有关更多信息,请参阅神经稀疏搜索。
结合多种搜索技术
混合搜索通过在 OpenSearch 中结合多种搜索技术来提高搜索相关性。它将传统关键词搜索与基于向量的语义搜索相结合。通过可配置的搜索管道,混合搜索规范化并结合来自不同搜索方法的分数,以提供统一、相关的结果。这种方法对于需要语义理解和精确匹配的复杂查询特别有效。搜索管道可以通过后过滤操作和聚合进一步定制,以满足特定的搜索要求。有关更多信息,请参阅混合搜索。