Couchbase Vector 存储
CouchbaseVector 类使用 Couchbase Vector Search 提供 Vector 搜索。它可以在 Couchbase collection 中执行高效的相似度搜索和元数据过滤。
要求要求的直接链接
- Couchbase Server 7.6.4+ 或兼容的 Capella cluster
- Couchbase 部署中已启用 Search Service
安装安装的直接链接
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/couchbase@latest
pnpm add @mastra/couchbase@latest
yarn add @mastra/couchbase@latest
bun add @mastra/couchbase@latest
用法示例用法示例的直接链接
import { CouchbaseVector } from '@mastra/couchbase'
const store = new CouchbaseVector({
id: 'couchbase-vector',
connectionString: process.env.COUCHBASE_CONNECTION_STRING,
username: process.env.COUCHBASE_USERNAME,
password: process.env.COUCHBASE_PASSWORD,
bucketName: process.env.COUCHBASE_BUCKET,
scopeName: process.env.COUCHBASE_SCOPE,
collectionName: process.env.COUCHBASE_COLLECTION,
})
构造函数选项构造函数选项的直接链接
id:
connectionString:
username:
password:
bucketName:
scopeName:
collectionName:
options?:
方法方法的直接链接
createIndex()createindex的直接链接
在 Couchbase 中创建新的 Vector 索引。
索引创建是异步的。调用 createIndex 后,请等待一段时间再查询(小型数据集通常需要 1 到 5 秒,大型数据集需要更长时间)。在生产环境中,应通过轮询检查索引状态,而不是使用固定延迟。
indexName:
dimension:
metric?:
upsert()upsert的直接链接
在 collection 中添加或更新 Vector 及其元数据。
你可以在创建索引之前或之后执行数据 upsert。upsert 方法不要求索引已经存在。Couchbase 允许对同一个 collection 创建多个 Search 索引。
indexName:
vectors:
metadata?:
ids?:
query()query的直接链接
搜索相似 Vector。
目前不支持 filter 和 includeVector 参数。必须在检索结果后进行客户端过滤,或者直接使用 Couchbase SDK 的 Search 功能。要检索 Vector embedding,请使用 Couchbase SDK 按 ID 获取完整文档。
indexName:
queryVector:
topK?:
filter?:
includeVector?:
minScore?:
describeIndex()describeindex的直接链接
返回索引相关信息。
indexName:
返回:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindex的直接链接
删除索引及其所有数据。
indexName:
listIndexes()listindexes的直接链接
列出 Couchbase bucket 中的所有 Vector 索引。
返回:Promise<string[]>
updateVector()updatevector的直接链接
根据 ID 使用新的 Vector 数据和/或元数据更新特定 Vector 条目。Couchbase 尚未实现基于过滤条件的更新。
indexName:
id:
update:
deleteVector()deletevector的直接链接
根据 ID 从索引中删除单个 Vector。
indexName:
id:
deleteVectors()deletevectors的直接链接
根据 ID 删除多个 Vector。Couchbase 尚未实现基于过滤条件的删除。
indexName:
ids:
disconnect()disconnect的直接链接
关闭 Couchbase client 连接。使用完该存储后应调用此方法。
响应类型响应类型的直接链接
查询结果按以下格式返回:
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
}
错误处理错误处理的直接链接
该存储会抛出可捕获的类型化错误:
try {
await store.query({
indexName: 'my_index',
queryVector: queryVector,
})
} catch (error) {
// Handle specific error cases
if (error.message.includes('Invalid index name')) {
console.error(
'Index name must start with a letter or underscore and contain only valid characters.',
)
} else if (error.message.includes('Index not found')) {
console.error('The specified index does not exist')
} else {
console.error('Vector store error:', error.message)
}
}
注意事项注意事项的直接链接
- 删除索引时的注意事项: 删除 Search 索引不会删除关联 Couchbase collection 中的 Vector/文档。除非明确删除,否则数据仍会保留。
- 所需权限: Couchbase 用户必须具有连接权限、对目标 collection 中的文档进行读写的权限(
kvrole),以及管理 Search 索引的权限(相关 bucket/scope 上的search_adminrole)。 - 索引定义详情和文档结构:
createIndex方法会构建一个 Search 索引定义,以索引embedding字段(类型为vector)和content字段(类型为text),目标是指定scopeName.collectionName中的文档。每个文档都将 Vector 存储在embedding字段中,并将元数据存储在metadata字段中。如果metadata包含text属性,其值还会复制到顶层content字段,并为文本搜索建立索引。 - 复制和持久性: 考虑使用 Couchbase 内置的复制和持久化功能来确保持久存储数据。定期监控索引统计信息,以确保搜索高效运行。
限制限制的直接链接
- 索引创建延迟可能会影响创建后立即执行的查询。
- 写入时不会强制检查 Vector 维度(维度不匹配会在查询时引发错误)。
- Vector 插入和索引更新采用最终一致性。写入后不会立即保证强一致性。