设置
要访问CouchbaseSearchVectorStore,您首先需要安装 langchain-couchbase 合作伙伴包
凭据
前往 Couchbase 网站并创建一个新连接,确保保存您的数据库用户名和密码初始化
在实例化之前,我们需要创建一个连接。创建 Couchbase 连接对象
我们首先创建一个到 Couchbase 集群的连接,然后将集群对象传递给向量存储。 在这里,我们使用上面提供的用户名和密码进行连接。您还可以使用任何其他受支持的方式连接到您的集群。 有关连接到 Couchbase 集群的更多信息,请查看文档。简单实例化
下面,我们使用集群信息和搜索索引名称创建向量存储对象。指定文本和嵌入字段
您可以选择使用text_key 和 embedding_key 字段指定文档的文本和嵌入字段。
管理向量存储
创建向量存储后,我们可以通过添加和删除不同的项目来与其交互。向向量存储添加项目
我们可以使用add_documents 函数将项目添加到向量存储中。
从向量存储中删除项目
查询向量存储
一旦您的向量存储被创建并添加了相关文档,您很可能希望在链或代理运行期间查询它。直接查询
相似性搜索
执行简单的相似性搜索可以按如下方式完成带分数的相似性搜索
您还可以通过调用similarity_search_with_score 方法获取结果的分数。
过滤结果
您可以通过在文档的文本或元数据中指定 Couchbase 搜索服务支持的任何过滤器来过滤搜索结果。filter 可以是 Couchbase Python SDK 支持的任何有效SearchQuery。这些过滤器在执行向量搜索之前应用。 如果您想在元数据中的一个字段上进行过滤,您需要使用 . 来指定它。 例如,要获取元数据中的 source 字段,您需要指定 metadata.source。 请注意,过滤器需要得到搜索索引的支持。指定要返回的字段
您可以使用搜索中的fields 参数指定要从文档返回的字段。这些字段作为返回文档中 metadata 对象的一部分返回。您可以获取存储在搜索索引中的任何字段。文档的 text_key 作为文档 page_content 的一部分返回。 如果您未指定要获取的任何字段,则返回索引中存储的所有字段。 如果您想获取元数据中的一个字段,您需要使用 . 来指定它。 例如,要获取元数据中的 source 字段,您需要指定 metadata.source。通过转换为检索器进行查询
您还可以将向量存储转换为检索器,以便在您的链中更轻松地使用。 以下是如何将向量存储转换为检索器,然后使用简单的查询和过滤器调用检索器。混合查询
Couchbase 允许您通过将向量搜索结果与文档的非向量字段(如metadata 对象)上的搜索结合起来进行混合搜索。 结果将基于向量搜索结果和搜索服务支持的搜索结果的组合。每个组件搜索的分数相加,以获得结果的总分。 要执行混合搜索,有一个可选参数 search_options,可以传递给所有相似性搜索。search_options 的不同搜索/查询可能性可以在此处找到。为混合搜索创建多样化的元数据
为了模拟混合搜索,让我们从现有文档中创建一些随机元数据。我们统一地向元数据中添加三个字段:date 在 2010 年到 2020 年之间,rating 在 1 到 5 之间,author 设置为 John Doe 或 Jane Doe。
按精确值查询
我们可以在metadata 对象中对作者这样的文本字段进行精确匹配搜索。
按部分匹配查询
我们可以通过指定搜索的模糊性来搜索部分匹配。当您想要搜索搜索查询的细微变化或拼写错误时,这很有用。 在这里,“Jae”与“Jane”接近(模糊性为 1)。按日期范围查询
我们可以对像metadata.date 这样的日期字段进行日期范围查询,搜索在该日期范围内的文档。
按数字范围查询
我们可以对像metadata.rating 这样的数字字段进行数字范围查询,搜索在该范围内的文档。
组合多个搜索查询
不同的搜索查询可以使用 AND(合取)或 OR(析取)运算符组合。 在这个例子中,我们正在检查评分在 3 到 4 之间且日期在 2015 年到 2018 年之间的文档。filter 参数而不是混合搜索。将混合搜索查询与过滤器结合
混合搜索可以与过滤器结合,以获得混合搜索和过滤器的最佳效果,从而满足要求。 在此示例中,我们正在检查评分在 3 到 5 之间且文本字段中匹配字符串“independence”的文档。其他查询
同样,您可以在search_options 参数中使用任何受支持的查询方法,例如地理距离、多边形搜索、通配符、正则表达式等。有关可用查询方法及其语法的更多详细信息,请参阅文档。
用于检索增强生成的使用
有关如何将此向量存储用于检索增强生成 (RAG) 的指南,请参阅以下部分常见问题解答
问题:我应该在创建 CouchbaseSearchVectorStore 对象之前创建搜索索引吗?
是的,目前您需要在创建CouchbaseSearchVectoreStore 对象之前创建搜索索引。
问题:我的搜索结果中没有显示所有指定的字段
在 Couchbase 中,我们只能返回存储在搜索索引中的字段。请确保您尝试在搜索结果中访问的字段是搜索索引的一部分。 一种处理方式是在索引中动态索引和存储文档的字段。- 在 Capella 中,您需要进入“高级模式”,然后在“通用设置”下拉菜单下勾选“[X] 存储动态字段”或“[X] 索引动态字段”
- 在 Couchbase Server 中,在索引编辑器(非快速编辑器)的“高级”下拉菜单下,您可以勾选“[X] 存储动态字段”或“[X] 索引动态字段”
问题:我的搜索结果中无法看到元数据对象
这很可能是由于文档中的metadata 字段未被 Couchbase 搜索索引索引和/或存储。为了索引文档中的 metadata 字段,您需要将其作为子映射添加到索引中。 如果您选择映射中的所有字段,您将能够按所有元数据字段进行搜索。或者,为了优化索引,您可以选择 metadata 对象中要索引的特定字段。您可以参考文档了解有关索引子映射的更多信息。 创建子映射
问题:filter 和 search_options / hybrid queries 之间有什么区别?
过滤器是预过滤器,用于限制搜索索引中搜索的文档。它在 Couchbase Server 7.6.4 及更高版本中可用。 混合查询是可用于调整从搜索索引返回结果的其他搜索查询。 过滤器和混合搜索查询都具有相同的功能,但语法略有不同。过滤器是SearchQuery对象,而混合搜索查询是字典。API 参考
有关所有CouchbaseSearchVectorStore 功能和配置的详细文档,请访问 API 参考
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。