Qdrant高级教程:用TypeScript解锁数据分析潜力

云信安装大师
90
AI 质量分
10 5 月, 2025
2 分钟阅读
0 阅读

Qdrant高级教程:用TypeScript解锁数据分析潜力

引言

Qdrant是一个高性能的向量搜索引擎,专为机器学习应用设计。结合TypeScript的强大类型系统,我们可以构建出既高效又可靠的向量搜索应用。本教程将带你深入了解如何使用TypeScript操作Qdrant,实现复杂的数据分析功能。

准备工作

环境要求

  • Node.js 16+
  • TypeScript 4.5+
  • Docker(用于本地运行Qdrant)
  • 一个现代代码编辑器(如VSCode)

安装依赖

代码片段
npm install qdrant-client @types/node typescript --save-dev
npx tsc --init

1. 启动Qdrant服务

首先我们需要一个运行的Qdrant实例。最简单的方法是使用Docker:

代码片段
docker run -p 6333:6333 qdrant/qdrant

这个命令会:
– 下载最新版Qdrant镜像(如果本地没有)
– 在6333端口启动服务(这是Qdrant默认的HTTP API端口)

2. TypeScript客户端基础配置

创建qdrantClient.ts文件:

代码片段
import { QdrantClient } from 'qdrant-client';

// 创建客户端实例
const client = new QdrantClient({
    host: 'localhost',
    port: 6333,
});

// 测试连接
async function testConnection() {
    try {
        const response = await client.api('cluster').get();
        console.log('连接成功:', response.data);
    } catch (error) {
        console.error('连接失败:', error);
    }
}

testConnection();

关键点说明:
1. QdrantClient是官方提供的TypeScript客户端
2. hostport需要与你的Qdrant服务配置匹配
3. testConnection函数验证了基本的API可用性

3. 创建集合(Collection)

集合是Qdrant中存储向量的基本单位:

代码片段
async function createCollection(collectionName: string, vectorSize: number) {
    try {
        await client.createCollection(collectionName, {
            vectors: {
                size: vectorSize,
                distance: 'Cosine', // 支持Cosine/Euclidean/Dot
            },
        });
        console.log(`集合 ${collectionName} 创建成功`);
    } catch (error) {
        console.error('创建集合失败:', error);
    }
}

// 创建一个128维的向量集合
createCollection('products', 128);

参数解释:
distance: 指定向量相似度计算方式:
Cosine: 余弦相似度(推荐用于文本)
Euclidean: 欧几里得距离
Dot: 点积相似度

4. 插入向量数据

让我们插入一些示例数据:

代码片段
interface ProductVector {
    id: string | number;
    vector: number[];
    payload?: Record<string, any>;
}

async function insertVectors(collectionName: string, vectors: ProductVector[]) {
    try {
        const points = vectors.map(vector => ({
            id: vector.id,
            vector: vector.vector,
            payload: vector.payload || {},
        }));

        await client.upsert(collectionName, {
            points,
        });

        console.log(`成功插入 ${vectors.length}条数据`);
    } catch (error) {
        console.error('插入数据失败:', error);
    }
}

// 示例数据
const sampleVectors = [
    { id: 'prod_1', vector: [...Array(128).fill(0.12)], payload: { name: '智能手表', price: 299 } },
    { id: 'prod_2', vector: [...Array(128).fill(0.24)], payload: { name: '无线耳机', price: 199 } },
];

insertVectors('products', sampleVectors);

最佳实践:
1. TypeScript接口确保了类型安全
2. payload可以存储任意JSON数据,用于过滤或展示结果
3. Qdrent会自动为payload字段建立索引

5.执行向量搜索

现在我们可以执行实际的相似度搜索了:

“`typescript
async function searchSimilar(
collectionName: string,
queryVector: number[],
limit =

原创 高质量