搜索中心-问题知识库查询接口。插入问题知识库修改。
This commit is contained in:
+11
-4
@@ -77,7 +77,7 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
|
|||||||
|
|
||||||
//如果该条问题知识库的展示权限为私密,则创建权限表数据
|
//如果该条问题知识库的展示权限为私密,则创建权限表数据
|
||||||
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
|
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
|
||||||
batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
|
this.batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
|
||||||
}else {
|
}else {
|
||||||
//如果展示权限是公开,则把该数据插入到搜索中心中。
|
//如果展示权限是公开,则把该数据插入到搜索中心中。
|
||||||
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
|
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
|
||||||
@@ -117,10 +117,13 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
|
|||||||
this.putMap(problemKnowledgeBaseId,sbEn.toString(),CutEnum.EN.getValue(),stringMapEnBase,null,"Problem knowledge base");
|
this.putMap(problemKnowledgeBaseId,sbEn.toString(),CutEnum.EN.getValue(),stringMapEnBase,null,"Problem knowledge base");
|
||||||
|
|
||||||
mapListTempCn.add(stringMapCn);
|
mapListTempCn.add(stringMapCn);
|
||||||
|
mapListTempEn.add(stringMapEn);
|
||||||
|
|
||||||
|
stringMapCnBase.put("id",problemKnowledgeBaseId + "base");
|
||||||
mapListTempCn.add(stringMapCnBase);
|
mapListTempCn.add(stringMapCnBase);
|
||||||
|
|
||||||
mapListTempEn.add(stringMapEn);
|
stringMapEnBase.put("id",problemKnowledgeBaseId + "base");
|
||||||
mapListTempEn.add(stringMapCnBase);
|
mapListTempEn.add(stringMapEnBase);
|
||||||
|
|
||||||
JSONObject jsonObjectCn = JSON.parseObject(JSON.toJSONString(stringMapCn));
|
JSONObject jsonObjectCn = JSON.parseObject(JSON.toJSONString(stringMapCn));
|
||||||
JSONObject jsonObjectEn = JSON.parseObject(JSON.toJSONString(stringMapEn));
|
JSONObject jsonObjectEn = JSON.parseObject(JSON.toJSONString(stringMapEn));
|
||||||
@@ -152,6 +155,10 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
|
|||||||
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), problemKnowledgeBaseId);
|
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), problemKnowledgeBaseId);
|
||||||
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), problemKnowledgeBaseId);
|
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), problemKnowledgeBaseId);
|
||||||
|
|
||||||
|
//根据id删除全部索引中数据
|
||||||
|
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), problemKnowledgeBaseId + "base");
|
||||||
|
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), problemKnowledgeBaseId + "base");
|
||||||
|
|
||||||
//根据id删除问题知识库索引中数据
|
//根据id删除问题知识库索引中数据
|
||||||
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), problemKnowledgeBaseId);
|
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), problemKnowledgeBaseId);
|
||||||
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), problemKnowledgeBaseId);
|
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), problemKnowledgeBaseId);
|
||||||
@@ -298,7 +305,7 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
|
|||||||
|
|
||||||
//如果该条问题知识库的展示权限为私密,则创建权限表数据
|
//如果该条问题知识库的展示权限为私密,则创建权限表数据
|
||||||
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
|
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
|
||||||
batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
|
this.batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
|
||||||
this.deleteElasticsearchData(problemKnowledgeBaseEO.getId());
|
this.deleteElasticsearchData(problemKnowledgeBaseEO.getId());
|
||||||
}else {
|
}else {
|
||||||
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
|
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
|
||||||
|
|||||||
+8
@@ -104,4 +104,12 @@ public class DocumentSearchController {
|
|||||||
iDocumentSearchService.deleteAll();
|
iDocumentSearchService.deleteAll();
|
||||||
return Result.OK();
|
return Result.OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value="列表查询问题知识库", notes="列表查询问题知识库")
|
||||||
|
@PostMapping(value = "/getProblemKnowledgeBasePage")
|
||||||
|
//@RequiresPermissions("document:search")
|
||||||
|
public Result<?> getProblemKnowledgeBasePage(@RequestBody Map<String,Object> map) {
|
||||||
|
IPage infoList = iDocumentSearchService.getProblemKnowledgeBasePage(map);
|
||||||
|
return Result.OK(infoList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+202
@@ -1073,6 +1073,208 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage getProblemKnowledgeBasePage(Map<String, Object> map) {
|
||||||
|
|
||||||
|
boolean flagTemp = true;
|
||||||
|
String cut = (String) map.get("cut");
|
||||||
|
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
|
||||||
|
flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue());
|
||||||
|
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
|
||||||
|
flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!flagTemp) {
|
||||||
|
return new Page(Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString()));
|
||||||
|
}
|
||||||
|
JSONArray queryJsonMustNot = new JSONArray();
|
||||||
|
|
||||||
|
String selectValue = (String) map.get("selectValue");
|
||||||
|
String selectValueTwo = (String) map.get("selectValueTwo");
|
||||||
|
//1. 需要查询的字段
|
||||||
|
List<String> fieldList = new ArrayList<>();
|
||||||
|
fieldList.add("title");//权重5
|
||||||
|
fieldList.add("file_text");//权重4
|
||||||
|
fieldList.add("content");//权重3
|
||||||
|
fieldList.add("file_name"); //权重2
|
||||||
|
fieldList.add("module_type");
|
||||||
|
fieldList.add("id");
|
||||||
|
fieldList.add("flag");
|
||||||
|
|
||||||
|
JSONArray queryMapJson = new JSONArray();
|
||||||
|
JSONArray queryMapJsonTwo = new JSONArray();
|
||||||
|
JSONArray queryMapJsonThree = new JSONArray();
|
||||||
|
JSONArray queryMapJsonAll = new JSONArray();
|
||||||
|
|
||||||
|
Map<String,Object> mapHighlight = new HashMap<>();
|
||||||
|
Map<String,Object> mapHighlight1 = new HashMap<>();
|
||||||
|
//封装首次的条件
|
||||||
|
if (StringUtils.isNotBlank(selectValue)) {
|
||||||
|
for (String field : fieldList) {
|
||||||
|
Map<String, Object> map2 = new HashMap<>();
|
||||||
|
Map<String, Object> map3 = new HashMap<>();
|
||||||
|
Map<String, Object> map4 = new HashMap<>();
|
||||||
|
if("title".equals(field)){
|
||||||
|
map3.put("boost",1);
|
||||||
|
}else if("file_text".equals(field)){
|
||||||
|
map3.put("boost",0.01);
|
||||||
|
}else if("content".equals(field)){
|
||||||
|
map3.put("boost",0.01);
|
||||||
|
}else if("file_name".equals(field)){
|
||||||
|
map3.put("boost",1);
|
||||||
|
}
|
||||||
|
|
||||||
|
map3.put("query",selectValue);
|
||||||
|
map2.put(field, map3);
|
||||||
|
map4.put("match",map2);
|
||||||
|
queryMapJson.add(map4);
|
||||||
|
|
||||||
|
//高亮
|
||||||
|
if(!"flag".equals(field)){
|
||||||
|
highlight(mapHighlight, field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mapHighlight1.put("fields",mapHighlight);
|
||||||
|
}
|
||||||
|
if(CollectionUtils.isNotEmpty(queryMapJson)){
|
||||||
|
JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson);
|
||||||
|
queryMapJsonAll.add(jsonObject);
|
||||||
|
}
|
||||||
|
//封装二次的条件
|
||||||
|
if (StringUtils.isNotBlank(selectValueTwo)) {
|
||||||
|
for (String field : fieldList) {
|
||||||
|
Map<String, Object> queryMap = new HashMap<>();
|
||||||
|
Map<String, Object> map2 = new HashMap<>();
|
||||||
|
Map<String, Object> map3 = new HashMap<>();
|
||||||
|
if("title".equals(field)){
|
||||||
|
map3.put("boost",1);
|
||||||
|
}else if("file_text".equals(field)){
|
||||||
|
map3.put("boost",0.01);
|
||||||
|
}else if("content".equals(field)){
|
||||||
|
map3.put("boost",0.01);
|
||||||
|
}else if("file_name".equals(field)){
|
||||||
|
map3.put("boost",1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//特殊处理编号字段
|
||||||
|
map3.put("query",selectValueTwo);
|
||||||
|
// map3.put("minimum_should_match",2);
|
||||||
|
map2.put(field, map3);
|
||||||
|
queryMap.put("match", map2);
|
||||||
|
|
||||||
|
queryMapJsonTwo.add(queryMap);
|
||||||
|
//高亮
|
||||||
|
if(!"flag".equals(field)){
|
||||||
|
highlight(mapHighlight, field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mapHighlight1.put("fields",mapHighlight);
|
||||||
|
}
|
||||||
|
if(CollectionUtils.isNotEmpty(queryMapJsonTwo)){
|
||||||
|
JSONObject jsonObjectTwo = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonTwo);
|
||||||
|
queryMapJsonAll.add(jsonObjectTwo);
|
||||||
|
}
|
||||||
|
//ids进行三次封装
|
||||||
|
String ids = (String) map.get("ids");
|
||||||
|
if (StringUtils.isNotBlank(ids)) {
|
||||||
|
for (String s : ids.split(",")) {
|
||||||
|
Map<String, Object> queryMap = new HashMap<>();
|
||||||
|
Map<String, Object> queryMapTemp = new HashMap<>();
|
||||||
|
queryMapTemp.put("id", s);
|
||||||
|
queryMap.put("match_phrase", queryMapTemp);
|
||||||
|
queryMapJsonThree.add(queryMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(CollectionUtils.isNotEmpty(queryMapJsonThree)){
|
||||||
|
JSONObject jsonObjectThree = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonThree);
|
||||||
|
queryMapJsonAll.add(jsonObjectThree);
|
||||||
|
}
|
||||||
|
JSONObject sort = new JSONObject();
|
||||||
|
Map<String,Object> createTime = new HashMap<>();
|
||||||
|
Map<String,Object> createTime1 = new HashMap<>();
|
||||||
|
createTime.put("order","desc");
|
||||||
|
createTime1.put("createTime",createTime);
|
||||||
|
sort.putAll(createTime1);
|
||||||
|
|
||||||
|
Integer pageNo = Integer.parseInt(map.get("pageNo").toString());
|
||||||
|
Integer pageSize = Integer.parseInt(map.get("pageSize").toString());
|
||||||
|
IPage page = this.getProblemKnowledgeBasePage(selectValue, selectValueTwo, queryMapJsonAll, mapHighlight1,null,
|
||||||
|
pageNo, pageSize, null,(String) map.get("cut"),sort,queryJsonMustNot);
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private IPage getProblemKnowledgeBasePage(String selectValue, String selectValueTwo, JSONArray queryMapJson,Map<String,Object> highlightMap,
|
||||||
|
JSONArray should, Integer pageNo, Integer pageSize, String paragraphFlag,
|
||||||
|
String cut,JSONObject querySort,JSONArray queryMustNot) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
//基础添加封装
|
||||||
|
if ("paragraphFlag".equals(paragraphFlag)) {
|
||||||
|
jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, queryMustNot, null);
|
||||||
|
} else {
|
||||||
|
jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, queryMustNot, null);
|
||||||
|
}
|
||||||
|
JSONArray jsonArraySort = new JSONArray();
|
||||||
|
jsonArraySort.add(querySort);
|
||||||
|
|
||||||
|
//1. 条件,分页
|
||||||
|
JSONObject queryObject = jeroElasticsearchTemplate.buildQuery(null,
|
||||||
|
jsonObject,
|
||||||
|
highlightMap,
|
||||||
|
jsonArraySort,
|
||||||
|
pageNo-1,
|
||||||
|
pageSize);
|
||||||
|
//2. 数据查询
|
||||||
|
JSONObject search = new JSONObject();
|
||||||
|
|
||||||
|
if(CutEnum.CN.getValue().equals(cut)){
|
||||||
|
search = jeroElasticsearchTemplate.search(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(),
|
||||||
|
SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(),
|
||||||
|
queryObject);
|
||||||
|
}else{
|
||||||
|
search = jeroElasticsearchTemplate.search(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(),
|
||||||
|
SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(),
|
||||||
|
queryObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, Object>> list = (List<Map<String, Object>>) (((Map) search.get("hits")).get("hits"));
|
||||||
|
List<Map<String, Object>> mapList = new ArrayList<>();
|
||||||
|
for (Map<String, Object> map : list) {
|
||||||
|
Map<String, Object> mapSource = (Map<String, Object>) map.get("_source");
|
||||||
|
Map<String, Object> mapHighlight = (Map<String, Object>) map.get("highlight");
|
||||||
|
if(ObjectUtils.isNotEmpty(mapHighlight)){
|
||||||
|
for (Map.Entry<String, Object> entry : mapHighlight.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
List<String> value = (List<String>) entry.getValue();
|
||||||
|
String fieldConyent= "";
|
||||||
|
for (String s : value) {
|
||||||
|
fieldConyent += s;
|
||||||
|
}
|
||||||
|
mapSource.put(key,fieldConyent);
|
||||||
|
}
|
||||||
|
//如果这一条数据中有高亮字段值,但是file_text中没有高亮值, 则赋控制,否则列表中会展示所有的文件内容, 赋空后,则展示基础数据
|
||||||
|
String fileText = (String) mapSource.get("file_text");
|
||||||
|
if(StringUtils.isNotBlank(fileText) && !fileText.contains("<text class='highlight-class'>")){
|
||||||
|
mapSource.put("file_text","");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mapList.add(mapSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
//处理分页
|
||||||
|
IPage page = new Page(pageNo, pageSize);
|
||||||
|
if (StringUtils.isNotBlank(selectValueTwo)) {
|
||||||
|
//二次搜索的结果
|
||||||
|
page.setTotal(Long.parseLong(String.valueOf(((Map) search.get("hits")).get("total"))));
|
||||||
|
page.setRecords(mapList);
|
||||||
|
} else {
|
||||||
|
//首次搜索的结果
|
||||||
|
page.setTotal(Long.parseLong(String.valueOf(((Map) search.get("hits")).get("total"))));
|
||||||
|
page.setRecords(mapList);
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
@@ -27,4 +27,5 @@ public interface IDocumentSearchService {
|
|||||||
|
|
||||||
void deleteAll();
|
void deleteAll();
|
||||||
|
|
||||||
|
IPage getProblemKnowledgeBasePage(Map<String, Object> map);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user