提交 5ad06d27 作者: ChenShiQiang

commit temp

上级 862304bd
package com.zzsn.knowbase.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redisConfig
*
* @author ShiQiangChen
* @date 2024/1/8
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, ?> getRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, ?> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setEnableTransactionSupport(true);
template.setConnectionFactory(factory);
return template;
}
}
\ No newline at end of file
...@@ -26,18 +26,18 @@ import java.util.Map; ...@@ -26,18 +26,18 @@ import java.util.Map;
public class KnowInterceptor implements HandlerInterceptor { public class KnowInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前) // // 在请求处理之前进行调用(Controller方法调用之前)
// 返回true才会继续执行后续的Interceptor和Controller // // 返回true才会继续执行后续的Interceptor和Controller
// 返回false则取消当前请求 // // 返回false则取消当前请求
String token = request.getHeader("X-Access-Token"); // String token = request.getHeader("X-Access-Token");
//
KbAuthorizedUserService userService = SpringContextUtils.getBean(KbAuthorizedUserService.class); // KbAuthorizedUserService userService = SpringContextUtils.getBean(KbAuthorizedUserService.class);
Result<?> result = userService.doCheck(token); // Result<?> result = userService.doCheck(token);
/**第三方用户验证未通过,直接拦截请求并返回提示*/ // /**第三方用户验证未通过,直接拦截请求并返回提示*/
if (!result.isSuccess()){ // if (!result.isSuccess()){
doRes(request,response); // doRes(request,response);
return false; // return false;
} // }
return true; return true;
} }
......
...@@ -35,8 +35,8 @@ public class KnowledgeController { ...@@ -35,8 +35,8 @@ public class KnowledgeController {
@Autowired @Autowired
private IKnowledgeService knowledgeService; private IKnowledgeService knowledgeService;
@Value("${python.IntelligentQaUrl:}") @Value("${python.intelligentQaUrl:}")
private String IntelligentQaUrl; private String intelligentQaUrl;
/** /**
* 分页列表查询 * 分页列表查询
...@@ -51,6 +51,20 @@ public class KnowledgeController { ...@@ -51,6 +51,20 @@ public class KnowledgeController {
return Result.OK(pageList); return Result.OK(pageList);
} }
/**
* 分页列表查询
*/
@GetMapping(value = "/listFromPython")
public Result<?> listFromPython(KnowledgeParam knowledgeParam,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "column", defaultValue = "common") String column,
@RequestParam(name = "order", defaultValue = "desc") String order) {
IPage<KnowledgeVO> pageList = knowledgeService.listFromPython(knowledgeParam, pageNo, pageSize, column, order);
return Result.OK(pageList);
}
/** /**
* 添加 * 添加
* *
...@@ -108,7 +122,7 @@ public class KnowledgeController { ...@@ -108,7 +122,7 @@ public class KnowledgeController {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("question",intelligentQaParam.getQuestion()); params.put("question",intelligentQaParam.getQuestion());
params.put("knowledge_base_id",Arrays.asList(intelligentQaParam.getKnowledgeProjectIds().split(","))); params.put("knowledge_base_id",Arrays.asList(intelligentQaParam.getKnowledgeProjectIds().split(",")));
String result = HttpUtil.doPost(IntelligentQaUrl, params, 120000); String result = HttpUtil.doPost(intelligentQaUrl, params, 120000);
if(!result.isEmpty()){ if(!result.isEmpty()){
JSONObject jsonObject= JSON.parseObject(result); JSONObject jsonObject= JSON.parseObject(result);
return Result.OK(jsonObject.get("result")); return Result.OK(jsonObject.get("result"));
......
...@@ -78,6 +78,7 @@ public class Knowledge implements Serializable { ...@@ -78,6 +78,7 @@ public class Knowledge implements Serializable {
* 发布时间 * 发布时间
*/ */
private String publishDate; private String publishDate;
private String verifyTime;
/** /**
* 审核状态 * 审核状态
*/ */
......
...@@ -41,4 +41,6 @@ public interface IKnowledgeService { ...@@ -41,4 +41,6 @@ public interface IKnowledgeService {
* @return * @return
*/ */
IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order); IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
} }
package com.zzsn.knowbase.service.impl; package com.zzsn.knowbase.service.impl;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.knowbase.constant.Constants; import com.zzsn.knowbase.constant.Constants;
...@@ -28,7 +30,9 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; ...@@ -28,7 +30,9 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import springfox.documentation.spring.web.json.Json;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
...@@ -38,6 +42,8 @@ import java.util.Date; ...@@ -38,6 +42,8 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.apache.commons.lang3.StringUtils.split;
/** /**
* @Description: 知识 * @Description: 知识
* @Author: chenshiqiang * @Author: chenshiqiang
...@@ -53,6 +59,11 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -53,6 +59,11 @@ class KnowledgeServiceImpl implements IKnowledgeService {
private CodeGenerateUtil codeGenerateUtil; private CodeGenerateUtil codeGenerateUtil;
@Autowired @Autowired
private ProduceInfo produceInfo; private ProduceInfo produceInfo;
@Value("${python.searchUrl:}")
private String searchUrl;
@Autowired
private RedisUtil redisUtil;
@Override @Override
public void addKnowledge(HttpServletRequest httpServletRequest, Knowledge knowledge) { public void addKnowledge(HttpServletRequest httpServletRequest, Knowledge knowledge) {
...@@ -186,7 +197,7 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -186,7 +197,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
} else { } else {
multiMatchQueryBuilder.field("title", 60); multiMatchQueryBuilder.field("title", 60);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content",20); multiMatchQueryBuilder.field("contents.content", 20);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder); nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None); NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder); boolQuery.must(nestedQueryBuilder);
...@@ -203,7 +214,7 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -203,7 +214,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
} else { } else {
multiMatchQueryBuilder.field("title", 3); multiMatchQueryBuilder.field("title", 3);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content",1); multiMatchQueryBuilder.field("contents.content", 1);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder); nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None); NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder); boolQuery.must(nestedQueryBuilder);
...@@ -257,4 +268,78 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -257,4 +268,78 @@ class KnowledgeServiceImpl implements IKnowledgeService {
return pageData; return pageData;
} }
@Override
public IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order) {
Object data = redisUtil.get(genKey(knowledgeParam));
// if (org.springframework.util.StringUtils.isEmpty(data)) {
if (true) {
JSONObject params = new JSONObject();
params.put("type", null == knowledgeParam.getTypes() ? null : Arrays.asList(knowledgeParam.getTypes().split(",")));
params.put("startTime", knowledgeParam.getStartTime());
params.put("endTime", knowledgeParam.getEndTime());
params.put("author", knowledgeParam.getAuthor());
params.put("origin", knowledgeParam.getOrigin());
params.put("verifierName", knowledgeParam.getVerifierName());
params.put("verifyStatus", knowledgeParam.getVerifyStatus());
params.put("verifyStartTime", knowledgeParam.getVerifyStartTime());
params.put("knowledge_base_id", knowledgeParam.getKnowledgeProjectId());
params.put("verifyEndTime", knowledgeParam.getVerifyEndTime());
params.put("score_threshold", 600);//score
params.put("vector_search_top_k", 100);//number
if (knowledgeParam.getSearchScope().equals(2)) {
params.put("question", knowledgeParam.getSearchInfo());
}
String result = null;
try {
result = HttpUtil.doPost(searchUrl, params, 120000);
} catch (IOException e) {
e.printStackTrace();
}
if (result == null||!result.contains("results")) {
return null;
}
JSONObject jsonObject = JSONObject.parseObject(result);
data=jsonObject.get("results");
redisUtil.set(genKey(knowledgeParam), data,100000000);
}
JSONArray jsonArray = JSONObject.parseArray(data.toString());
List<Knowledge> knowledgeList=new ArrayList<>(jsonArray.size());
for (Object o : jsonArray) {
JSONObject one = JSONObject.parseObject(o.toString());
knowledgeList.add(Knowledge.builder()
.id((String) one.get("id"))
.build());
}
return null;
}
private String genKey(KnowledgeParam knowledgeParam) {
String type = (knowledgeParam.getTypes() == null ? "" : knowledgeParam.getTypes());
String knowledgeProjectId = (knowledgeParam.getKnowledgeProjectId() == null ? "" : knowledgeParam.getKnowledgeProjectId());
String startTime = (knowledgeParam.getStartTime() == null ? "" : knowledgeParam.getStartTime());
String endTime = (knowledgeParam.getEndTime() == null ? "" : knowledgeParam.getEndTime());
String author = (knowledgeParam.getAuthor() == null ? "" : knowledgeParam.getAuthor());
String origin = (knowledgeParam.getOrigin() == null ? "" : knowledgeParam.getOrigin());
String verifierName = (knowledgeParam.getVerifierName() == null ? "" : knowledgeParam.getVerifierName());
String verifyStatus = (knowledgeParam.getVerifyStatus() == null ? "" : String.valueOf(knowledgeParam.getVerifyStatus()));
String verifyStartTime = (knowledgeParam.getVerifyStartTime() == null ? "" : knowledgeParam.getVerifyStartTime());
String verifyEndTime = (knowledgeParam.getVerifyEndTime() == null ? "" : knowledgeParam.getVerifyEndTime());
String searchInfo = (knowledgeParam.getSearchInfo() == null ? "" : knowledgeParam.getSearchInfo());
return type + "#" +
knowledgeProjectId + "#" +
startTime + "#" +
endTime + "#" +
author + "#" +
origin + "#" +
verifierName + "#" +
verifyStatus + "#" +
verifyStartTime + "#" +
verifyEndTime + "#" +
searchInfo + "#";
}
} }
package com.zzsn.knowbase.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* redis 工具类
*/
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
*
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
// ============================String=============================
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 递增
*
* @param key 键
* @param delta 要增加几(大于0)
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 递减
*
* @param key 键
* @param delta 要减少几(小于0)
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
// ================================Map=================================
/**
* HashGet
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
/**
* 获取hashKey对应的所有键值
*
* @param key 键
* @return 对应的多个键值
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet 并设置时间
*
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value, long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除hash表中的值
*
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}
/**
* 判断hash表中是否有该项的值
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
*
* @param key 键
* @param item 项
* @param by 要增加几(大于0)
*/
public void hincr(String key, String item, double by) {
redisTemplate.opsForHash().increment(key, item, by);
}
/**
* hash递减
*
* @param key 键
* @param item 项
* @param by 要减少记(小于0)
*/
public double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}
// ============================set=============================
/**
* 根据key获取Set中的所有值
*
* @param key 键
*/
public Set<Object> sGet(String key) {
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据value从一个set中查询,是否存在
*
* @param key 键
* @param value 值
* @return true 存在 false不存在
*/
public boolean sHasKey(String key, Object value) {
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将数据放入set缓存
*
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 将set数据放入缓存
*
* @param key 键
* @param time 时间(秒)
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key, long time, Object... values) {
try {
long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) {
expire(key, time);
}
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取set缓存的长度
*
* @param key 键
*/
public long sGetSetSize(String key) {
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 移除值为value的
*
* @param key 键
* @param values 值 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object... values) {
try {
return redisTemplate.opsForSet().remove(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
// ===============================list=================================
/**
* 获取list缓存的内容
*
* @param key 键
* @param start 开始
* @param end 结束 0 到 -1代表所有值
*/
public List<Object> lGet(String key, long start, long end) {
try {
return redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取list缓存的长度
*
* @param key 键
*/
public long lGetListSize(String key) {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 通过索引 获取list中的值
*
* @param key 键
* @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
*/
public Object lGetIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据索引修改list中的某条数据
*
* @param key 键
* @param index 索引
* @param value 值
*/
public boolean lUpdateIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 移除N个值为value
*
* @param key 键
* @param count 移除多少个
* @param value 值
* @return 移除的个数
*/
public long lRemove(String key, long count, Object value) {
try {
return redisTemplate.opsForList().remove(key, count, value);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取指定前缀的一系列key
* 使用scan命令代替keys, Redis是单线程处理,keys命令在KEY数量较多时,
* 操作效率极低【时间复杂度为O(N)】,该命令一旦执行会严重阻塞线上其它命令的正常请求
* @param keyPrefix key统一的前缀
*/
private Set<String> keys(String keyPrefix) {
String realKey = keyPrefix + "*";
try {
return redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
Set<String> binaryKeys = new HashSet<>();
Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(realKey).count(Integer.MAX_VALUE).build());
while (cursor.hasNext()) {
binaryKeys.add(new String(cursor.next()));
}
return binaryKeys;
});
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
/**
* 删除指定前缀的一系列key
* @param keyPrefix key统一的前缀
*/
public void removeAll(String keyPrefix) {
try {
Set<String> keys = keys(keyPrefix);
if (!CollectionUtils.isEmpty(keys)) {
redisTemplate.delete(keys);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
...@@ -24,7 +24,7 @@ public class KnowledgeParam { ...@@ -24,7 +24,7 @@ public class KnowledgeParam {
/** /**
* 作者 * 作者
*/ */
private Integer author; private String author;
/** /**
* 发布时间 * 发布时间
*/ */
...@@ -48,12 +48,14 @@ public class KnowledgeParam { ...@@ -48,12 +48,14 @@ public class KnowledgeParam {
/** /**
* 类型 * 类型
*/ */
private String type; private String types;
private String startTime; private String startTime;
private String endTime; private String endTime;
private String searchInfo; private String searchInfo;
private Integer searchScope; private Integer searchScope;
private String searchAccuracy; private String searchAccuracy;
private String verifyStartTime;
private String verifyEndTime;
} }
...@@ -18,8 +18,6 @@ spring: ...@@ -18,8 +18,6 @@ spring:
brokers: 114.115.159.144:9092 brokers: 114.115.159.144:9092
zkNodes: 114.115.159.144:2181 zkNodes: 114.115.159.144:2181
requiredAcks: 1 requiredAcks: 1
redis: redis:
database: 0 database: 0
host: 114.115.236.206 host: 114.115.236.206
...@@ -39,7 +37,8 @@ mybatis-plus: ...@@ -39,7 +37,8 @@ mybatis-plus:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
python: python:
IntelligentQaUrl: http://116.63.179.212:7862/platform/chat intelligentQaUrl: http://116.63.179.212:7862/platform/chat
searchUrl: http://114.115.172.99:10013/platform/search
know: know:
thirdpartyurl: thirdpartyurl:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论