diff --git a/dsGw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java b/dsGw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java index 7fdba2a2..f09ecd63 100644 --- a/dsGw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java +++ b/dsGw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java @@ -3,7 +3,7 @@ package com.dsideal.gw.Handler; import com.dsideal.gw.Bean.RetBean; import com.dsideal.gw.GwApplication; import com.dsideal.gw.Util.JwtUtil; -import com.dsideal.gw.Config.GatewayConfig; +import com.dsideal.Config.GatewayConfig; import com.jfinal.handler.Handler; import com.jfinal.kit.StrKit; import com.jfinal.upload.MultipartRequest; diff --git a/dsRes/src/main/java/com/dsideal/Res/Milvus/Controller/MilvusDemoController.java b/dsRes/src/main/java/com/dsideal/Res/Milvus/Controller/MilvusDemoController.java new file mode 100644 index 00000000..8aaa2f9c --- /dev/null +++ b/dsRes/src/main/java/com/dsideal/Res/Milvus/Controller/MilvusDemoController.java @@ -0,0 +1,64 @@ +package com.dsideal.Res.Milvus.Controller; + +import com.dsideal.Config.PropKit; +import com.dsideal.Res.Plugin.MilvusPlugin; +import com.dsideal.Res.ResApplication; +import com.jfinal.core.Controller; +import com.jfinal.kit.Ret; +import io.milvus.client.MilvusServiceClient; +import io.milvus.common.clientenum.ConsistencyLevelEnum; +import io.milvus.grpc.SearchResults; +import io.milvus.param.MetricType; +import io.milvus.param.R; +import io.milvus.param.collection.LoadCollectionParam; +import io.milvus.param.dml.SearchParam; +import io.milvus.response.SearchResultsWrapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; + +public class MilvusDemoController extends Controller { + private final MilvusPlugin milvusPlugin = MilvusPlugin.getInstance(); + private static final Logger logger = LoggerFactory.getLogger(MilvusDemoController.class); + + public void index() { + try { + MilvusServiceClient client = milvusPlugin.getClient(); + String collectionName = PropKit.get("milvus.ms_collection_name"); + + // 加载集合 + client.loadCollection( + LoadCollectionParam.newBuilder() + .withCollectionName(collectionName) + .build() + ); + + // 示例:搜索向量 + List> vectors = Arrays.asList( + Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f) // 示例向量,需要根据实际维度调整 + ); + + SearchParam searchParam = SearchParam.newBuilder() + .withCollectionName(collectionName) + .withConsistencyLevel(ConsistencyLevelEnum.STRONG) + .withMetricType(MetricType.L2) + .withOutFields(Arrays.asList("field1", "field2")) + .withTopK(5) + .withVectors(vectors) + .withVectorFieldName("vector_field") + .build(); + + // 修改这行代码 + R searchResponse = client.search(searchParam); + SearchResultsWrapper wrapper = new SearchResultsWrapper(searchResponse.getData()); + + // 返回搜索结果 + renderJson(wrapper.getIDScore(0)); + } catch (Exception e) { + logger.error("Milvus查询失败", e); + renderJson(Ret.fail("msg", "查询失败:" + e.getMessage())); + } + } +} \ No newline at end of file diff --git a/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java b/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java new file mode 100644 index 00000000..e3d2be07 --- /dev/null +++ b/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java @@ -0,0 +1,44 @@ +package com.dsideal.Res.Plugin; + +import io.milvus.client.MilvusServiceClient; +import io.milvus.param.ConnectParam; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Getter +public class MilvusPlugin { + private static MilvusPlugin instance; + private MilvusServiceClient client; + private static final Logger logger = LoggerFactory.getLogger(MilvusPlugin.class); + + private MilvusPlugin() {} + + public static MilvusPlugin getInstance() { + if (instance == null) { + instance = new MilvusPlugin(); + } + return instance; + } + + public void init(String host, int port, int maxConnections) { + try { + ConnectParam connectParam = ConnectParam.newBuilder() + .withHost(host) + .withPort(port) + .build(); + + client = new MilvusServiceClient(connectParam); + logger.info("Milvus连接成功"); + } catch (Exception e) { + logger.error("Milvus初始化失败: " + e.getMessage(), e); + throw new RuntimeException("Milvus初始化失败", e); + } + } + + public void close() { + if (client != null) { + client.close(); + } + } +} \ No newline at end of file diff --git a/dsRes/src/main/java/com/dsideal/Res/ResApplication.java b/dsRes/src/main/java/com/dsideal/Res/ResApplication.java index 2d1110ae..110556f9 100644 --- a/dsRes/src/main/java/com/dsideal/Res/ResApplication.java +++ b/dsRes/src/main/java/com/dsideal/Res/ResApplication.java @@ -5,8 +5,10 @@ import com.dsideal.Config.PropKit; import com.dsideal.Res.Base.Controller.BaseController; import com.dsideal.Res.Index.IndexController; import com.dsideal.Res.Interceptor.*; +import com.dsideal.Res.Milvus.Controller.MilvusDemoController; import com.dsideal.Res.Model._MappingKit; import com.dsideal.Res.Neo4j.Controller.Neo4jDemoController; +import com.dsideal.Res.Plugin.MilvusPlugin; import com.dsideal.Res.Plugin.Neo4jPlugin; import com.dsideal.Res.Res.Controller.ResourceController; import com.dsideal.Res.Util.LogBackLogFactory; @@ -27,6 +29,7 @@ public class ResApplication extends JFinalConfig { private static final Neo4jPlugin neo4jPlugin = Neo4jPlugin.getInstance(); private static final Logger logger = LoggerFactory.getLogger(ResApplication.class); + private final MilvusPlugin milvusPlugin = MilvusPlugin.getInstance(); public static void main(String[] args) { System.out.println("当前环境: " + PropKit.getEnvPrefix()); @@ -53,6 +56,7 @@ public class ResApplication extends JFinalConfig { me.add("/res", ResourceController.class); //Neo4j测试 me.add("/neo4j", Neo4jDemoController.class); + me.add("/milvus", MilvusDemoController.class); } @Override @@ -105,6 +109,19 @@ public class ResApplication extends JFinalConfig { logger.error("Neo4j配置失败", e); throw new RuntimeException("Neo4j配置失败", e); } + + // 配置 Milvus + try { + String host = PropKit.get("milvus.ms_host"); + int port = PropKit.getInt("milvus.ms_port"); + int maxConnections = PropKit.getInt("milvus.ms_max_connections"); + + logger.info("正在初始化Milvus连接: host={}, port={}", host, port); + milvusPlugin.init(host, port, maxConnections); + } catch (Exception e) { + logger.error("Milvus配置失败", e); + throw new RuntimeException("Milvus配置失败", e); + } } /** @@ -152,5 +169,6 @@ public class ResApplication extends JFinalConfig { public void onStop() { // JFinal 停止时关闭 Neo4j 连接 neo4jPlugin.close(); + milvusPlugin.close(); } } diff --git a/dsRes/src/main/resources/application_dev.yaml b/dsRes/src/main/resources/application_dev.yaml index ed683034..af51c38c 100644 --- a/dsRes/src/main/resources/application_dev.yaml +++ b/dsRes/src/main/resources/application_dev.yaml @@ -68,4 +68,6 @@ mivlus: # Milvus 服务器的端口号 ms_port: 19530 # Milvus 集合的名称 - ms_collection_name: ds_collection \ No newline at end of file + ms_collection_name: ds_collection + # Milvus 连接池的最大连接数 + ms_max_connections: 50 diff --git a/dsRes/src/main/resources/application_pro.yaml b/dsRes/src/main/resources/application_pro.yaml index 7d34fb51..5367db46 100644 --- a/dsRes/src/main/resources/application_pro.yaml +++ b/dsRes/src/main/resources/application_pro.yaml @@ -68,4 +68,6 @@ mivlus: # Milvus 服务器的端口号 ms_port: 19530 # Milvus 集合的名称 - ms_collection_name: ds_collection \ No newline at end of file + ms_collection_name: ds_collection + # Milvus 连接池的最大连接数 + ms_max_connections: 50 \ No newline at end of file