# vector_demo_for_java
**Repository Path**: dbalyy_dbalyy/vector_demo_for_java
## Basic Information
- **Project Name**: vector_demo_for_java
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-28
- **Last Updated**: 2026-05-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Vastbase/VexDB 向量数据库 Java Demo
这是一个通过 Java 访问 Vastbase/VexDB 向量数据库的示例项目,展示了如何使用 MyBatis 进行向量数据的存储、查询和相似度搜索。
## 功能特性
- **向量数据 CRUD 操作**:支持创建、查询、更新、删除向量文档
- **批量插入**:支持批量导入向量数据
- **向量相似度搜索**:
- 余弦相似度搜索 (Cosine Similarity)
- 欧几里得距离搜索 (Euclidean Distance)
- 内积距离搜索 (Inner Product)
- **全文检索**:支持 BM25 全文检索和关键字匹配
## 技术栈
- **Java 版本**: 11
- **数据库**: Vastbase/VexDB (兼容 PostgreSQL)
- **ORM 框架**: MyBatis 3 + MyBatis-Plus
- **向量类型处理**: PGvector
- **测试框架**: JUnit 5
## 项目结构
```
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── cn/com/vastbase/
│ │ │ │ └── PGvectorTypeHandler.java # 向量类型处理器
│ │ │ ├── generator/
│ │ │ │ ├── domain/
│ │ │ │ │ └── VectorDocument.java # 向量文档实体
│ │ │ │ ├── mapper/
│ │ │ │ │ └── VectorDocumentMapper.java # 数据访问层
│ │ │ │ └── service/
│ │ │ │ └── VectorDocumentService.java # 业务逻辑层
│ │ │ └── org/example/
│ │ │ └── MainDemo.java # 示例主程序
│ │ └── resources/
│ │ ├── generator/mapper/
│ │ │ └── VectorDocumentMapper.xml # MyBatis Mapper 配置
│ │ └── mybatis-config.xml # MyBatis 主配置
│ └── test/
│ └── java/
│ └── generator/service/
│ └── VectorDocumentServiceTest.java # 单元测试
├── pom.xml # Maven 配置
└── README.md # 项目说明
```
## 环境要求
- JDK 11 或更高版本
- Maven 3.6+
- Vastbase/VexDB 数据库 (推荐版本 2.0+)
## 快速开始
### 1. 数据库配置
在 `src/main/resources/mybatis-config.xml` 中配置数据库连接信息:
```xml
```
### 2. 创建数据库表
执行以下 SQL 语句创建向量文档表:
```sql
CREATE TABLE vector_documents (
id BIGSERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
vector FLOATVECTOR(128),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建向量索引(可选但建议)
CREATE INDEX ON vector_documents USING graph_index (vector floatvector_l2_ops) WITH (m=32, ef_construction=200, parallel_workers=8);
CREATE INDEX ON vector_documents USING graph_index (vector floatvector_ip_ops) WITH (m=32, ef_construction=200, parallel_workers=8);
CREATE INDEX ON vector_documents USING graph_index (vector floatvector_cosine_ops) WITH (m=32, ef_construction=200, parallel_workers=8);
-- 创建全文索引(可选)
CREATE INDEX ON vector_documents USING fulltext(title, content);
```
### 3. 编译项目
```bash
mvn clean compile
```
### 4. 运行示例
```bash
mvn exec:java -Dexec.mainClass="org.example.MainDemo"
```
## API 接口
### VectorDocumentService
| 方法 | 功能 | 参数 | 返回值 |
|------|------|------|--------|
| `createDocument` | 创建文档 | `VectorDocument document` | `Long` - 文档ID |
| `getDocument` | 根据ID查询文档 | `Long id` | `VectorDocument` |
| `getAllDocuments` | 查询所有文档 | `int limit` | `List` |
| `updateDocument` | 更新文档 | `VectorDocument document` | `boolean` |
| `deleteDocument` | 删除文档 | `Long id` | `boolean` |
| `batchCreateDocuments` | 批量创建文档 | `List documents` | `int` - 插入数量 |
| `searchByCosineDistance` | 余弦相似度搜索 | `float[] queryVector, int limit` | `List` |
| `searchByEuclideanDistance` | 欧几里得距离搜索 | `float[] queryVector, int limit` | `List` |
| `searchByInnerProduct` | 内积距离搜索 | `float[] queryVector, int limit` | `List` |
| `matchByFulltext` | 关键字匹配 | `List queries, int limit` | `List` |
| `searchByFulltext` | BM25全文检索 | `List queries, int limit` | `List` |
## 向量搜索说明
### 距离度量方式
| 操作符 | 距离类型 | 说明 |
|--------|----------|------|
| `<=>` | 余弦距离 | 返回范围 [0, 2],值越小越相似 |
| `<->` | 欧几里得距离 | 返回非负值,值越小越相似 |
| `<#>` | 内积距离 | 返回实数,值越大越相似 |
### 全文检索语法
```sql
-- 关键字匹配(精确匹配)
title @-@ '关键词'
content @-@ '关键词'
-- BM25 全文检索(模糊匹配)
title @~@ '关键词'
content @~@ '关键词'
```
## 运行测试
```bash
mvn test
```
测试用例覆盖:
- 文档创建、查询、更新、删除
- 批量插入
- 三种向量相似度搜索
- 全文检索
- 边界情况处理
## 注意事项
1. 向量维度需与数据库表定义一致(默认 128 维)
2. 建议为向量字段创建索引以提高搜索性能
3. 全文检索需要先创建全文索引
4. 数据库连接信息需根据实际环境配置
## License
MIT License