refactor(vector-store): 移除VectorStoreStrategy接口并简化策略模式实现

移除VectorStoreStrategy接口,直接使用VectorStoreService作为策略接口
简化VectorStoreStrategyFactory实现,移除冗余方法
更新相关实现类以适配新的接口结构
This commit is contained in:
Yzm
2025-10-17 16:31:09 +08:00
parent 766f6ad266
commit 962c2b693c
5 changed files with 13 additions and 51 deletions

View File

@@ -2,16 +2,13 @@ package org.ruoyi.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.ruoyi.common.core.service.ConfigService;
import org.ruoyi.domain.bo.QueryVectorBo;
import org.ruoyi.domain.bo.StoreEmbeddingBo;
import org.ruoyi.service.VectorStoreService;
import org.ruoyi.service.strategy.VectorStoreStrategy;
import org.ruoyi.service.strategy.VectorStoreStrategyFactory;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 向量库管理
@@ -30,14 +27,14 @@ public class VectorStoreServiceImpl implements VectorStoreService {
/**
* 获取当前配置的向量库策略
*/
private VectorStoreStrategy getCurrentStrategy() {
private VectorStoreService getCurrentStrategy() {
return strategyFactory.getStrategy();
}
@Override
public void createSchema(String vectorModelName, String kid) {
log.info("创建向量库schema: vectorModelName={}, kid={}, modelName={}", vectorModelName, kid);
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
strategy.createSchema(vectorModelName, kid);
}
@@ -45,7 +42,7 @@ public class VectorStoreServiceImpl implements VectorStoreService {
public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo) {
log.info("存储向量数据: kid={}, docId={}, 数据条数={}",
storeEmbeddingBo.getKid(), storeEmbeddingBo.getDocId(), storeEmbeddingBo.getChunkList().size());
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
strategy.storeEmbeddings(storeEmbeddingBo);
}
@@ -53,28 +50,28 @@ public class VectorStoreServiceImpl implements VectorStoreService {
public List<String> getQueryVector(QueryVectorBo queryVectorBo) {
log.info("查询向量数据: kid={}, query={}, maxResults={}",
queryVectorBo.getKid(), queryVectorBo.getQuery(), queryVectorBo.getMaxResults());
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
return strategy.getQueryVector(queryVectorBo);
}
@Override
public void removeById(String id, String modelName) {
log.info("根据ID删除向量数据: id={}, modelName={}", id, modelName);
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
strategy.removeById(id, modelName);
}
@Override
public void removeByDocId(String docId, String kid) {
log.info("根据docId删除向量数据: docId={}, kid={}", docId, kid);
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
strategy.removeByDocId(docId, kid);
}
@Override
public void removeByFid(String fid, String kid) {
log.info("根据fid删除向量数据: fid={}, kid={}", fid, kid);
VectorStoreStrategy strategy = getCurrentStrategy();
VectorStoreService strategy = getCurrentStrategy();
strategy.removeByFid(fid, kid);
}
}

View File

@@ -9,6 +9,7 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.ruoyi.common.core.config.VectorStoreProperties;
import org.ruoyi.common.core.utils.StringUtils;
import org.ruoyi.service.VectorStoreService;
/**
* 向量库策略抽象基类
@@ -18,7 +19,7 @@ import org.ruoyi.common.core.utils.StringUtils;
*/
@Slf4j
@RequiredArgsConstructor
public abstract class AbstractVectorStoreStrategy implements VectorStoreStrategy {
public abstract class AbstractVectorStoreStrategy implements VectorStoreService {
protected final VectorStoreProperties vectorStoreProperties;

View File

@@ -1,18 +0,0 @@
package org.ruoyi.service.strategy;
import org.ruoyi.service.VectorStoreService;
/**
* 向量库策略接口
* 继承VectorStoreService以避免重复定义相同的方法
*
* @author Yzm
*/
public interface VectorStoreStrategy extends VectorStoreService {
/**
* 获取向量库类型标识
* @return 向量库类型weaviate, milvus
*/
String getVectorStoreType();
}

View File

@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
import org.ruoyi.common.core.config.VectorStoreProperties;
import org.ruoyi.service.strategy.impl.MilvusVectorStoreStrategy;
import org.ruoyi.service.strategy.impl.WeaviateVectorStoreStrategy;
import org.ruoyi.service.VectorStoreService;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@@ -26,7 +27,7 @@ public class VectorStoreStrategyFactory {
private final WeaviateVectorStoreStrategy weaviateStrategy;
private final MilvusVectorStoreStrategy milvusStrategy;
private Map<String, VectorStoreStrategy> strategies;
private Map<String, VectorStoreService> strategies;
@PostConstruct
public void init() {
@@ -39,36 +40,18 @@ public class VectorStoreStrategyFactory {
/**
* 获取当前配置的向量库策略
*/
public VectorStoreStrategy getStrategy() {
public VectorStoreService getStrategy() {
String vectorStoreType = vectorStoreProperties.getType();
if (vectorStoreType == null || vectorStoreType.trim().isEmpty()) {
vectorStoreType = "weaviate"; // 默认使用weaviate
}
VectorStoreStrategy strategy = strategies.get(vectorStoreType.toLowerCase());
VectorStoreService strategy = strategies.get(vectorStoreType.toLowerCase());
if (strategy == null) {
log.warn("未找到向量库策略: {}, 使用默认策略: weaviate", vectorStoreType);
strategy = strategies.get("weaviate");
}
log.debug("使用向量库策略: {}", vectorStoreType);
return strategy;
}
/**
* 根据类型获取向量库策略
*/
public VectorStoreStrategy getStrategy(String type) {
if (type == null || type.trim().isEmpty()) {
return getStrategy();
}
VectorStoreStrategy strategy = strategies.get(type.toLowerCase());
if (strategy == null) {
log.warn("未找到向量库策略: {}, 使用默认策略", type);
return getStrategy();
}
return strategy;
}
}

View File

@@ -46,7 +46,6 @@ public class MilvusVectorStoreStrategy extends AbstractVectorStoreStrategy {
public void createSchema(String vectorModelName, String kid) {
String url = vectorStoreProperties.getMilvus().getUrl();
String collectionName = vectorStoreProperties.getMilvus().getCollectionname() + kid;
// 使用 LangChain4j 的 MilvusEmbeddingStore 来确保集合存在(按需创建)
MilvusEmbeddingStore store = MilvusEmbeddingStore.builder()
.uri(url)
.collectionName(collectionName)