You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Astra DB中结合类JSON数据实现向量搜索?含Mongoose场景

一、Astra DB中处理类JSON数据并结合向量搜索

Astra DB作为兼容Cassandra的文档型数据库,原生支持类JSON(BSON)结构的动态存储,同时提供向量搜索能力,两者可无缝结合。

1. 准备工作

  • 创建集合:无需预定义固定Schema,直接创建集合即可,类JSON结构的字段会自动适配。
  • 创建向量索引:为存储向量的字段创建专用索引,指定维度和相似度算法(如余弦相似度)。示例CQL命令:
CREATE VECTOR INDEX idx_doc_embedding 
ON your_collection(embedding) 
USING 'cosine' 
WITH dimensions = 1536; -- 维度需与嵌入模型输出一致,如OpenAI text-embedding-ada-002为1536

2. 存储类JSON数据与向量

直接插入包含嵌套JSON结构和向量的文档,示例CQL:

INSERT INTO your_collection(id, metadata, embedding) 
VALUES (
  'doc_001',
  {
    "title": "Astra DB 向量搜索指南",
    "category": "database",
    "tags": ["vector", "cassandra"]
  },
  [0.123, 0.456, ...] -- 模型生成的向量数组
);

其中metadata字段为类JSON嵌套结构,可根据业务需求自由定义。

3. 结合JSON过滤与向量搜索

使用CQL的JSON路径表达式过滤类JSON字段,同时执行近似最近邻(ANN)搜索,示例:

SELECT id, metadata, embedding, similarity_score
FROM your_collection
WHERE metadata->>'category' = 'database' -- 过滤JSON中的category字段
ORDER BY embedding ANN OF [0.789, 0.101, ...] -- 目标向量
WITH similarity_threshold = 0.7 -- 相似度阈值(可选)
LIMIT 10;

->>用于提取JSON字段的字符串值,可灵活实现嵌套字段的过滤。


二、JavaScript应用中通过Mongoose结合Astra DB处理类JSON与向量搜索

Astra DB兼容MongoDB协议,可直接使用Mongoose库操作,同时支持MongoDB风格的向量搜索语法。

1. 环境配置

  • 安装依赖:
npm install mongoose
  • 连接Astra DB:获取Astra DB的MongoDB连接URI(控制台"Connect"选项卡生成),初始化Mongoose连接:
const mongoose = require('mongoose');

async function connectToAstra() {
  try {
    await mongoose.connect('your_astra_mongodb_uri', {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    console.log('Connected to Astra DB');
  } catch (err) {
    console.error('Connection error:', err);
  }
}
connectToAstra();

2. 定义Schema与模型

针对类JSON结构,可使用Mixed类型存储任意嵌套数据,或显式定义嵌套Schema;向量字段定义为数值数组类型:

const documentSchema = new mongoose.Schema({
  // 类JSON结构:Mixed支持任意嵌套,也可显式定义字段
  metadata: {
    type: mongoose.Schema.Types.Mixed,
    required: true
  },
  // 向量字段:维度需与嵌入模型匹配
  embedding: {
    type: [Number],
    required: true
  }
});

// 建议直接在Astra控制台创建向量索引,确保参数匹配
const Document = mongoose.model('Document', documentSchema);

3. 存储类JSON数据与向量

创建并保存包含嵌套JSON和向量的文档:

async function saveDocument() {
  const newDoc = new Document({
    metadata: {
      title: "Mongoose操作Astra DB",
      category: "javascript",
      author: "dev"
    },
    embedding: [0.234, 0.567, ...] // 嵌入模型生成的向量
  });

  await newDoc.save();
  console.log('Document saved');
}
saveDocument();

4. 执行向量搜索结合JSON过滤

使用Mongoose的vectorSearch方法,结合JSON字段过滤,示例:

async function searchDocuments(targetVector) {
  const results = await Document.find(
    { 'metadata.category': 'javascript' }, // 过滤JSON中的category字段
    { score: { $meta: 'vectorSearchScore' } } // 返回相似度分数
  )
  .vectorSearch({
    queryVector: targetVector, // 目标向量
    path: 'embedding', // 向量字段路径
    numCandidates: 100, // 候选集大小(平衡精度与性能)
    limit: 10, // 返回结果数量
    index: 'idx_doc_embedding' // 提前创建的向量索引名称
  })
  .sort({ score: { $meta: 'vectorSearchScore' } }); // 按相似度排序

  console.log('Search results:', results);
}

// 调用搜索:传入模型生成的目标向量
searchDocuments([0.890, 0.121, ...]);

内容的提问来源于stack exchange,提问作者Madhavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:39:55