# 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