提交 5386b104 作者: yanxin

增加es到向量库数据同步任务

上级 72916c47
......@@ -15,6 +15,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器,拦截所有路径
registry.addInterceptor(new KnowInterceptor()).addPathPatterns("/**");
//registry.addInterceptor(new KnowInterceptor()).addPathPatterns("/**");
}
}
package com.zzsn.knowbase.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.entity.*;
import com.zzsn.knowbase.service.IKnowledgeService;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.service.KbKnowledgeProjectService;
import com.zzsn.knowbase.util.AuthUtil;
import com.zzsn.knowbase.util.ExcelExportUtil;
import com.zzsn.knowbase.util.SpringContextUtils;
import com.zzsn.knowbase.util.tree.Node;
import com.zzsn.knowbase.vo.KnowledgeParam;
import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* 知识
* @Author: chenshiqiang
* @Version: V1.0
*/
@Api(tags = "知识")
@RestController
@RequestMapping("/api/knowledge/sync")
@Slf4j
public class SyncController {
@Autowired
private IKnowledgeService knowledgeService;
@Autowired
private KbKnowledgeProjectService knowledgeProjectService;
@Autowired
private ILocalFileService localFileService;
/**
* es->向量库 数据同步任务
* @param kbKnowledgeId 知识库id
* @param knowledgeProjectId 分组id
* @param startDate 创建时间-开始
* @param endDate 创建时间-结束
* @return
*/
@GetMapping(value = "/start")
public Result<?> start(String id,String kbKnowledgeId, String knowledgeProjectId,String startDate,String endDate) {
if(StringUtils.isNotEmpty(id)){
knowledgeService.syncById(id);
return Result.OK("同步成功");
}
log.info("es->向量库 数据同步任务,参数:{}",kbKnowledgeId+" "+knowledgeProjectId+" "+startDate+" "+endDate);
List<String> idList = knowledgeService.queryIdList(kbKnowledgeId, knowledgeProjectId, startDate, endDate,100000);
log.info("es->向量库 数据同步任务,待同步数据条数:{}", idList.size());
knowledgeService.syncByIds(idList);
return Result.OK(idList.size()+"条数据同步中...");
}
}
\ No newline at end of file
......@@ -67,4 +67,27 @@ public interface IKnowledgeService {
String comprocessByName(List<String> list, String filePath);
List<String> groupUserList(String kbKnowledgeId);
/**
* 查询知识库数据id列表
* @param kbKnowledgeId 知识库id
* @param knowledgeProjectId 分组id
* @param startDate 创建时间-开始
* @param endDate 创建时间-结束
* @param size 查询数据条数
* @return
*/
List<String> queryIdList(String kbKnowledgeId, String knowledgeProjectId, String startDate, String endDate, Integer size);
/**
* 同步单个
* @param id
*/
void syncById(String id);
/**
* 同步多个
* @param idList
*/
void syncByIds(List<String> idList);
}
......@@ -58,6 +58,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
......@@ -941,6 +942,72 @@ class KnowledgeServiceImpl implements IKnowledgeService {
return userIds;
}
@Override
public List<String> queryIdList(String kbKnowledgeId, String knowledgeProjectId, String startDate, String endDate, Integer size) {
//分类id列表
List<String> idList = new ArrayList<>();
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_KNOWLEDGE);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//设置分页参数
searchSourceBuilder.from(0);
searchSourceBuilder.size(size);
//仅查询id字段
searchSourceBuilder.fetchSource(new String[]{"id"}, null);
//默认最大数量是10000,设置为true后,显示准确数量
searchSourceBuilder.trackTotalHits(true);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.termsQuery("kbKnowledgeId", Arrays.asList(kbKnowledgeId.split(","))));
if (StringUtils.isNotEmpty(knowledgeProjectId)) {
boolQuery.must(QueryBuilders.termsQuery("knowledgeProjectId", Arrays.asList(knowledgeProjectId.split(","))));
}
//时间过滤筛选
if (StringUtils.isNotBlank(startDate)) {
boolQuery.filter(QueryBuilders.rangeQuery("createTime").gte(startDate));
}
if (StringUtils.isNotBlank(endDate)) {
boolQuery.filter(QueryBuilders.rangeQuery("createTime").lte(endDate));
}
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag",1));
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
if (null != searchResponse && null != searchResponse.getHits()) {
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
idList.add(String.valueOf(hit.getSourceAsMap().get("id")));
}
}
return idList;
}
@Override
public void syncById(String id) {
KnowledgeVO knowledge = this.getById(id);
if(knowledge!=null){
KnowledgeMessage knowledgeMessage = new KnowledgeMessage();
BeanUtils.copyProperties(knowledge, knowledgeMessage);
knowledgeMessage.setType(knowledge.getTypeId());
produceInfo.sendKnowledgeContents(knowledgeMessage);
log.info("es->向量库 数据同步,{}:{}",knowledgeMessage.getId(), knowledgeMessage.getTitle());
}
}
@Async
@Override
public void syncByIds(List<String> idList) {
for (String id : idList) {
this.syncById(id);
}
}
//导入发布库数据
public void importInfo(List<List<String>> lists, String kbKnowledgeId, String knowledgeProjectId, String typeId, String createBy) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论