使用Couchbase Vector Search进行高效数据检索的完整指南

74 阅读2分钟
# 引言

在现代应用程序开发中,快速而准确的数据检索是至关重要的。Couchbase作为一款获得大奖的分布式NoSQL数据库,提供了Vector Search功能,使得开发者可以通过矢量搜索技术更高效地检索数据。本文将详细讲解如何在Couchbase中使用Vector Search,包括从设置、连接到高级的查询操作。无论你是使用Couchbase Capella还是自托管的Couchbase Server,这篇文章都将为你提供实用的指导。

# 主要内容

## 设置环境

首先,我们需要安装`langchain-couchbase`包以访问CouchbaseVectorStore。使用以下命令安装该包:

```bash
pip install -qU langchain-couchbase

配置凭证

在使用Couchbase服务之前,你需要在Couchbase网站上创建一个新连接,并保存数据库的用户名和密码:

import getpass

COUCHBASE_CONNECTION_STRING = getpass.getpass(
    "Enter the connection string for the Couchbase cluster: "
)
DB_USERNAME = getpass.getpass("Enter the username for the Couchbase cluster: ")
DB_PASSWORD = getpass.getpass("Enter the password for the Couchbase cluster: ")

初始化连接

创建并初始化Couchbase连接对象:

from datetime import timedelta
from couchbase.auth import PasswordAuthenticator
from couchbase.cluster import Cluster
from couchbase.options import ClusterOptions

auth = PasswordAuthenticator(DB_USERNAME, DB_PASSWORD)
options = ClusterOptions(auth)
cluster = Cluster(COUCHBASE_CONNECTION_STRING, options)
cluster.wait_until_ready(timedelta(seconds=5))

设置Bucket和Collection

设置要使用的Couchbase的Bucket、Scope和Collection名称:

BUCKET_NAME = "langchain_bucket"
SCOPE_NAME = "_default"
COLLECTION_NAME = "default"
SEARCH_INDEX_NAME = "langchain-test-index"

实例化Vector Store

from langchain_couchbase.vectorstores import CouchbaseVectorStore
from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")

vector_store = CouchbaseVectorStore(
    cluster=cluster,
    bucket_name=BUCKET_NAME,
    scope_name=SCOPE_NAME,
    collection_name=COLLECTION_NAME,
    embedding=embeddings,
    index_name=SEARCH_INDEX_NAME,
)

代码示例

向Vector Store中添加文档并进行相似性搜索的完整代码示例:

from langchain_core.documents import Document
from uuid import uuid4

documents = [
    Document(page_content="Couchbase is a NoSQL database that scales easily.", metadata={"source": "article"}),
    Document(page_content="Vector search helps in finding similar documents.", metadata={"source": "tutorial"}),
]

uuids = [str(uuid4()) for _ in documents]
vector_store.add_documents(documents=documents, ids=uuids)

# 执行相似性搜索
results = vector_store.similarity_search(
    "What is Couchbase?",
    k=2
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

问题1:创建CouchbaseVectorStore对象前是否需要创建搜索索引?

是的,在创建CouchbaseVectorStore对象之前,需要先创建搜索索引。

问题2:为什么在搜索结果中看不到指定的字段?

请确保要访问的字段在搜索索引中被存储。如果需要动态字段支持,参考Couchbase文档进行配置。

总结和进一步学习资源

Couchbase的Vector Search提供了强大的数据检索功能,通过本文的教程,相信你已掌握了如何设置和使用这一工具。欲了解更多详细信息和高级用法,请参考以下资源:

参考资料

  1. Couchbase官方网站
  2. Langchain GitHub页面

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---