# yx-vector-db
**Repository Path**: hedingwei/yx-vector-db
## Basic Information
- **Project Name**: yx-vector-db
- **Description**: 轻量级纯JAVA编写的向量数据库
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-03-27
- **Last Updated**: 2025-03-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# YX Vector Database
一个基于 Lucene 实现的轻量级向量数据库,支持高效的向量检索和存储。
## 特性
- 基于 Lucene 实现的向量索引
- 支持高维向量的快速检索
- 轻量级设计,易于集成
- 支持 Java 8 及以上版本
- 提供简单直观的 API
## 快速开始
### Maven 依赖
```xml
com.gitee.hedingwei
yx-vector-db
1.0.0
```
### 基本使用
#### 1. 创建元数据类
首先需要创建一个继承自`MetaData`的元数据类,用于存储向量数据的附加信息。例如,我们可以创建一个包含用户名和文档内容的简单元数据类:
```java
@Data
public class SimpleMeta extends MetaData {
String userName; // 用户名
String document; // 文档内容
}
```
#### 2. 初始化向量数据库
使用以下代码初始化文本向量化模型和向量数据库:
```java
// 初始化文本向量化模型(使用 AllMiniLmL6V2 模型)
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
// 初始化向量数据库,指定存储路径
File dbFile = new File("./data/test_384");
IVectorDB db = IVectorDB.open(dbFile, SimpleMeta.class, embeddingModel.dimension());
```
#### 3. 添加向量数据
您可以添加多条向量数据到数据库中:
```java
// 添加第一条向量数据
SimpleMeta simpleMeta = new SimpleMeta();
simpleMeta.setDocument("今天的天气怎么样?适合出去走走吗?");
simpleMeta.setUserName("Lucy");
db.addVector("1", embedding(simpleMeta.getDocument()), simpleMeta);
// 添加第二条向量数据
SimpleMeta simpleMeta1 = new SimpleMeta();
simpleMeta1.setDocument("今天我想去打球,不知道有没有人想去打");
simpleMeta1.setUserName("Lily");
db.addVector("2", embedding(simpleMeta1.getDocument()), simpleMeta1);
```
#### 4. 执行向量相似度搜索
支持带条件和不带条件的向量相似度搜索:
```java
// 不带过滤条件的搜索
List> results = db.search(
embedding("天气情况"), // 搜索文本
0.7f, // 相似度阈值
10, // 返回结果数量
null // 过滤条件
);
// 带过滤条件的搜索
List> filteredResults = db.search(
embedding("天气情况"), // 搜索文本
0.7f, // 相似度阈值
10, // 返回结果数量
"userName = 'Lucy'" // 过滤条件
);
// 打印搜索结果
for (VectorSearchResult result : results) {
System.out.println(result);
}
```
#### 5. 文本向量化工具方法
使用以下方法将文本转换为向量:
```java
public static float[] embedding(String input) {
Response response = embeddingModel.embed(input);
Embedding embedding = response.content();
return embedding.vector();
}
```
### 构建项目
## 贡献指南
欢迎提交 Issue 和 Pull Request。在提交 PR 之前,请确保:
1. 更新测试用例
2. 遵循现有的代码风格
3. 在 commit 信息中写明改动点
## 开源协议
本项目采用 MIT 协议 。
## 联系方式
- 作者:Dingwei He
- 邮箱: 56910061@qq.com
## 致谢
感谢以下开源项目:
- Apache Lucene
- H2 Database
- Hutool