{"id":18879301,"url":"https://github.com/jdk-plus/spring-boot-starter-milvus","last_synced_at":"2025-06-27T10:35:42.858Z","repository":{"id":180017329,"uuid":"663018340","full_name":"JDK-Plus/spring-boot-starter-milvus","owner":"JDK-Plus","description":"一个为springboot编写的人工智能特征检索库","archived":false,"fork":false,"pushed_at":"2024-12-10T02:45:59.000Z","size":239,"stargazers_count":25,"open_issues_count":8,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-28T07:51:09.547Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JDK-Plus.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-06T11:29:40.000Z","updated_at":"2025-02-07T09:01:14.000Z","dependencies_parsed_at":"2024-01-15T09:29:01.085Z","dependency_job_id":"5633166f-ef99-4a4d-8725-a8f5d3044a3a","html_url":"https://github.com/JDK-Plus/spring-boot-starter-milvus","commit_stats":null,"previous_names":["jdk-plus/spring-boot-starter-milvus"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDK-Plus%2Fspring-boot-starter-milvus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDK-Plus%2Fspring-boot-starter-milvus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDK-Plus%2Fspring-boot-starter-milvus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDK-Plus%2Fspring-boot-starter-milvus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JDK-Plus","download_url":"https://codeload.github.com/JDK-Plus/spring-boot-starter-milvus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248943415,"owners_count":21186958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T06:35:09.870Z","updated_at":"2025-04-14T19:22:49.800Z","avatar_url":"https://github.com/JDK-Plus.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Milvus 2.0 是一款云原生向量数据库，采用存储与计算分离的架构设计。该重构版本的所有组件均为无状态组件，极大地增强了系统弹性和灵活性。更多系统架构细节，参考 [Milvus 系统架构](https://milvus.io/cn/docs/architecture_overview.md)。\n\nMilvus 基于 [Apache 2.0 License](https://github.com/milvus-io/milvus/blob/master/LICENSE) 协议发布，于 2019 年 10 月正式开源，是 [LF AI \u0026 Data 基金会](https://lfaidata.foundation/) 的毕业项目。\n\n\n\u003ch3 align=\"center\"\u003e一个java风格的Milvus操作库\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/JDK-Plus/spring-boot-starter-milvus/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/JDK-Plus/spring-boot-starter-milvus.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/JDK-Plus/spring-boot-starter-milvus/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/JDK-Plus/spring-boot-starter-milvus.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/JDK-Plus/spring-boot-starter-milvus/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/JDK-Plus/spring-boot-starter-milvus.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/JDK-Plus/spring-boot-starter-milvus/network/members\"\u003e\u003cimg src=\"https://img.shields.io/github/forks/JDK-Plus/spring-boot-starter-milvus.svg\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n该组件是一个仿照mybatis-plus风格编写的Milvus组件， 可以让你像使用mysql那样使用java来操作Milvus，执行精确的query查询或者使用向量执行相似性查询。\n\n- [English](README.md)\n\n\n### 一、如何引入\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eplus.jdk\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-milvus\u003c/artifactId\u003e\n    \u003cversion\u003e${last.version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 二、milvus的引用配置\n\n```bash\nplus.jdk.milvus.enabled=true\nplus.jdk.milvus.host=192.168.1.101\nplus.jdk.milvus.port=19530\nplus.jdk.milvus.user-name=root\nplus.jdk.milvus.password=123456\n```\n\n### 三、定义ORM对象\n\n\n```java\nimport io.milvus.grpc.DataType;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport plus.jdk.milvus.annotation.VectorCollectionColumn;\nimport plus.jdk.milvus.annotation.VectorCollectionName;\nimport plus.jdk.milvus.record.VectorModel;\n\nimport java.util.List;\n\n@Data\n@EqualsAndHashCode(callSuper = true)\n@VectorCollectionName(name = \"user_blog\", description = \"用户博文向量表\")\npublic class UserBlogVector extends VectorModel\u003cUserBlogVector\u003e {\n\n    /**\n     * 主键\n     */\n    @VectorCollectionColumn(name = \"id\", dataType = DataType.Int64, primary = true)\n    private Long id;\n\n    /**\n     * uid\n     */\n    @VectorCollectionColumn(name = \"uid\", dataType = DataType.Int64)\n    private Long uid;\n\n    /**\n     * 博文文本\n     */\n    @VectorCollectionColumn(name = \"blog_text\", dataType = DataType.VarChar, maxLength = 1024)\n    private String blogText;\n\n    /**\n     * 博文类型\n     */\n    @VectorCollectionColumn(name = \"blog_type\", dataType = DataType.JSON)\n    private JSONObject blogType;\n\n    /**\n     * 博文文本向量， 此处的博文文本向量使用m3e embedding, 所以是768\n     */\n    @VectorCollectionColumn(name = \"v_blog_text\", dataType = DataType.FloatVector, vectorDimension = 768)\n    private List\u003cFloat\u003e blogTextVector;\n}\n```\n\n### 四、定义申明Dao数据层\n\n我们在 `VectorModelRepositoryImpl` 封装了很多对 `milvus`进行基本操作的api\n\n```java\nimport com.weibo.biz.omniscience.dolly.milvus.entity.UserBlogVector;\nimport plus.jdk.milvus.annotation.VectorRepository;\nimport plus.jdk.milvus.record.VectorModelRepositoryImpl;\n\n@VectorRepository\npublic class UserBlogVectorDao extends VectorModelRepositoryImpl\u003cUserBlogVector\u003e {\n}\n```\n\n**一些常用的api示例如下：**\n\n```java\nimport com.alibaba.fastjson.JSONObject;\nimport lombok.extern.slf4j.Slf4j;\nimport org.junit.jupiter.api.Test;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport plus.jdk.milvus.collection.UserBlogVector;\nimport plus.jdk.milvus.common.MilvusException;\nimport plus.jdk.milvus.common.chat.ChatClient;\nimport plus.jdk.milvus.dao.UserBlogVectorDao;\nimport plus.jdk.milvus.model.HNSWIIndexExtra;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\n\n@Slf4j\n@SpringBootTest\npublic class UserBlogVectorServiceTest {\n\n    @Autowired\n    private UserBlogVectorDao userBlogVectorDao;\n\n    @Autowired\n    private ChatClient chatClient;\n\n\n    /**\n     * 创建集合和索引\n     */\n    @Test\n    public void createCollection() throws MilvusException {\n        boolean ret = userBlogVectorDao.createCollection();\n        HNSWIIndexExtra extra = new HNSWIIndexExtra();\n        extra.setM(16);\n        extra.setEfConstruction(8);\n        userBlogVectorDao.createIndex(\"idx_blog_vector\",\n                UserBlogVector::getBlogTextVector, extra);\n        userBlogVectorDao.loadCollection();\n    }\n\n\n    /**\n     * 向集合插入记录\n     */\n    @Test\n    public void insertVector() throws MilvusException {\n        String text = \"宝贝们！！没睡吧啊啊啊 刚出炉的九图 投票！喜欢图几\";\n        Long uid = 2656274875L;\n//        long timestamp = System.currentTimeMillis();\n//        Date startTime = new Date(timestamp - 3600 * 24 * 10 * 1000L); //最近3天的发博数据\n//        Date endTime = new Date(timestamp);\n        UserBlogVector userBlogVector = new UserBlogVector();\n        userBlogVector.setBlogText(text);\n        userBlogVector.setUid(uid);\n        userBlogVector.setBlogType(new JSONObject() {{\n            put(\"type\", Arrays.asList(\"1\", \"2\"));\n        }});\n        List\u003cList\u003cFloat\u003e\u003e embedding = chatClient.getEmbedding(Collections.singletonList(text));\n        userBlogVector.setBlogTextVector(embedding.get(0));\n        boolean ret = userBlogVectorDao.insert(userBlogVector);\n        log.info(\"{}\", ret);\n    }\n\n    /**\n     * 使用其他字段查找相关内容\n     */\n    @Test\n    public void query() throws MilvusException {\n        LambdaQueryWrapper\u003cUserBlogVector\u003e wrapper = new LambdaQueryWrapper\u003c\u003e();\n        wrapper.eq(UserBlogVector::getUid, 2656274875L)\n                .or()\n                .ne(UserBlogVector::getUid, 1234567890L)\n                .or(jsonWrapper -\u003e\n                        jsonWrapper\n                                .jsonContains(UserBlogVector::getBlogType, 1, \"type\")\n                                .jsonContainsAll(UserBlogVector::getBlogType, Arrays.asList(\"1\", \"2\"), \"type\")\n                                .or()\n                                .jsonContainsAny(UserBlogVector::getBlogType, Arrays.asList(\"112\", \"312\"), \"tasd\")\n                );\n        List\u003cUserBlogVector\u003e queryResults = userBlogVectorDao.query(wrapper);\n        log.info(\"{}\", queryResults);\n    }\n\n    /**\n     * 使用向量查找相似度最高的内容。可以结合其他字段做条件查询过滤\n     */\n    @Test\n    public void search() throws MilvusException {\n        String text = \"Hi guys!! Just out of the oven nine pictures. Vote! Like figure few\";\n        LambdaSearchWrapper\u003cUserBlogVector\u003e wrapper = new LambdaSearchWrapper\u003c\u003e();\n        List\u003cList\u003cFloat\u003e\u003e embedding = chatClient.getEmbedding(Collections.singletonList(text));\n        wrapper.vector(UserBlogVector::getBlogTextVector, embedding.get(0));\n        wrapper.setTopK(10);\n        wrapper.eq(UserBlogVector::getUid, 2656274875L);\n        wrapper.jsonContainsAny(UserBlogVector::getBlogType, Arrays.asList(\"1\", \"2\"), \"type\");\n        List\u003cUserBlogVector\u003e searchResults = userBlogVectorDao.search(wrapper);\n        log.info(\"{}\", searchResults);\n    }\n\n\n    /**\n     * 使用主键删除记录\n     * =\n     */\n    @Test\n    public void deleteRecord() throws MilvusException {\n        boolean ret = userBlogVectorDao.remove(12345556);\n        log.info(\"{}\", ret);\n    }\n\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdk-plus%2Fspring-boot-starter-milvus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdk-plus%2Fspring-boot-starter-milvus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdk-plus%2Fspring-boot-starter-milvus/lists"}