parent
558828bb00
commit
801e4d585a
@ -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<List<Float>> 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<SearchResults> 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue