增加了elasticsearch全局搜索和文章内搜索

This commit is contained in:
暮光:城中城
2019-07-11 23:36:30 +08:00
parent 9a50db6b5d
commit a081443c91
21 changed files with 1132 additions and 131 deletions

View File

@@ -1,6 +1,5 @@
package com.zyplayer.doc.wiki.controller;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
@@ -11,16 +10,16 @@ import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.*;
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
import com.zyplayer.doc.data.service.elasticsearch.service.EsWikiPage;
import com.zyplayer.doc.data.service.elasticsearch.service.EsWikiPageService;
import com.zyplayer.doc.data.service.elasticsearch.support.EsPage;
import com.zyplayer.doc.data.service.elasticsearch.support.EsQueryColumn;
import com.zyplayer.doc.data.service.manage.*;
import com.zyplayer.doc.data.utils.CacheUtil;
import com.zyplayer.doc.wiki.controller.param.SearchByEsParam;
import com.zyplayer.doc.wiki.controller.param.SpaceNewsParam;
import com.zyplayer.doc.wiki.controller.vo.SpaceNewsVo;
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
@@ -32,7 +31,6 @@ import org.dozer.Mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -58,6 +56,8 @@ public class WikiPageController {
@Resource
WikiPageContentService wikiPageContentService;
@Resource
WikiPageContentMapper wikiPageContentMapper;
@Resource
WikiPageFileService wikiPageFileService;
@Resource
WikiPageZanService wikiPageZanService;
@@ -306,82 +306,66 @@ public class WikiPageController {
return DocResponseJson.ok();
}
@GetMapping("/searchByEs")
@PostMapping("/searchByEs")
public ResponseJson<Object> searchByEs(SearchByEsParam param) {
// 空间不是自己的
Map<Long, WikiSpace> wikiSpaceSel = this.getCanVisitWikiSpace(param.getSpaceId());
if (wikiSpaceSel.isEmpty()) {
return DocResponseJson.ok();
}
if (esWikiPageService != null) {
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
if (wikiSpaceMap.isEmpty()) {
return DocResponseJson.ok();
}
List<EsQueryColumn> condition = new LinkedList<>();
condition.add(EsQueryColumn.like("name", param.getKeywords()));
condition.add(EsQueryColumn.like("content", param.getKeywords()));
condition.add(EsQueryColumn.must("delFlag", "0"));
condition.add(EsQueryColumn.in("spaceId", new ArrayList<>(wikiSpaceSel.keySet())));
condition.add(EsQueryColumn.in("spaceId", new ArrayList<>(wikiSpaceMap.keySet())));
String[] fields = {
"id", "preview", "createTime", "updateTime", "createUserId", "createUserName",
"updateUserId", "updateUserName", "spaceId", "name", "zanNum", "viewNum",
};
EsPage<EsWikiPage> wikiPageEsPage = esWikiPageService.getDataByCondition(condition, fields, param.getStartIndex(), param.getPageSize());
// 组装数据
List<EsWikiPage> esWikiPageList = wikiPageEsPage.getData();
List<SpaceNewsVo> pageVoList = new LinkedList<>();
esWikiPageList.forEach(val -> {
SpaceNewsVo spaceNewsVo = mapper.map(val, SpaceNewsVo.class);
spaceNewsVo.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
spaceNewsVo.setPreviewContent(val.getPreview());
spaceNewsVo.setPageTitle(val.getName());
spaceNewsVo.setPageId(val.getId());
pageVoList.add(spaceNewsVo);
});
// 组装数据返回
PageInfo<EsWikiPage> pageInfo = new PageInfo<>();
PageInfo<SpaceNewsVo> pageInfo = new PageInfo<>();
pageInfo.setTotal(wikiPageEsPage.getTotal());
pageInfo.setList(wikiPageEsPage.getData());
pageInfo.setList(pageVoList);
return DocResponseJson.ok(pageInfo);
} else {
logger.warn("未开启elasticsearch服务使用数据库查询匹配建议开启");
SpaceNewsParam newsParam = new SpaceNewsParam();
newsParam.setPageNum(param.getPageNum());
newsParam.setPageSize(param.getPageSize());
newsParam.setSpaceId(param.getSpaceId());
return this.news(newsParam);
param.setNewsType(1);
return this.news(param);
}
}
@PostMapping("/news")
public ResponseJson<Object> news(SpaceNewsParam param) {
public ResponseJson<Object> news(SearchByEsParam param) {
// 空间不是自己的
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
if (wikiSpaceMap.isEmpty()) {
return DocResponseJson.ok();
}
QueryWrapper<WikiPage> wrapper = new QueryWrapper<>();
wrapper.in("space_id", wikiSpaceMap.keySet());
wrapper.eq("del_flag", 0);
wrapper.orderByDesc(param.getNewsType() == 1, "update_time");
wrapper.orderByDesc(param.getNewsType() == 2, "create_time");
wrapper.orderByDesc(param.getNewsType() == 3, "view_num");
wrapper.orderByDesc(param.getNewsType() == 4, "zan_num");
wrapper.orderByDesc(param.getNewsType() == 5, "view_num+zan_num");
param.setSpaceIds(new ArrayList<>(wikiSpaceMap.keySet()));
if (StringUtils.isNotBlank(param.getKeywords())) {
param.setKeywords("%" + param.getKeywords() + "%");
}
// 分页查询
PageHelper.startPage(param.getPageNum(), param.getPageSize(), true);
List<WikiPage> pageList = wikiPageService.list(wrapper);
PageInfo<WikiPage> pageListPageInfo = new PageInfo<>(pageList);
if (pageList == null || pageList.isEmpty()) {
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
PageInfo<SpaceNewsVo> pageListPageInfo = new PageInfo<>(spaceNewsVoList);
if (spaceNewsVoList == null || spaceNewsVoList.isEmpty()) {
return DocResponseJson.ok(pageListPageInfo);
}
List<Long> pageIds = pageList.stream().map(WikiPage::getId).collect(Collectors.toList());
QueryWrapper<WikiPageContent> contentWrapper = new QueryWrapper<>();
contentWrapper.in("page_id", pageIds);
contentWrapper.select("page_id", "preview");
List<WikiPageContent> pageContentList = wikiPageContentService.list(contentWrapper);
Map<Long, String> contentMap = pageContentList.stream()
.filter(val -> val.getPreview() != null)
.collect(Collectors.toMap(WikiPageContent::getPageId, WikiPageContent::getPreview));
List<SpaceNewsVo> pageVoList = new LinkedList<>();
pageList.forEach(val -> {
SpaceNewsVo spaceNewsVo = mapper.map(val, SpaceNewsVo.class);
spaceNewsVo.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
spaceNewsVo.setPreviewContent(contentMap.get(val.getId()));
spaceNewsVo.setPageTitle(val.getName());
spaceNewsVo.setPageId(val.getId());
pageVoList.add(spaceNewsVo);
});
DocResponseJson<Object> responseJson = DocResponseJson.ok(pageListPageInfo);
responseJson.setData(pageVoList);
return responseJson;
spaceNewsVoList.forEach(val -> val.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName()));
return DocResponseJson.ok(pageListPageInfo);
}
private Map<Long, WikiSpace> getCanVisitWikiSpace(Long spaceId) {

View File

@@ -1,44 +0,0 @@
package com.zyplayer.doc.wiki.controller.param;
public class SearchByEsParam {
private Long spaceId;
private String keywords;
private Integer pageNum;
private Integer pageSize;
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public Integer getStartIndex() {
return (pageNum - 1) * pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Long getSpaceId() {
return spaceId;
}
public void setSpaceId(Long spaceId) {
this.spaceId = spaceId;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
}

View File

@@ -1,40 +0,0 @@
package com.zyplayer.doc.wiki.controller.param;
public class SpaceNewsParam {
private Long spaceId;
private Integer newsType;
private Integer pageNum;
private Integer pageSize;
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Long getSpaceId() {
return spaceId;
}
public void setSpaceId(Long spaceId) {
this.spaceId = spaceId;
}
public Integer getNewsType() {
return newsType;
}
public void setNewsType(Integer newsType) {
this.newsType = newsType;
}
}

View File

@@ -1,106 +0,0 @@
package com.zyplayer.doc.wiki.controller.vo;
import java.util.Date;
public class SpaceNewsVo {
private Long spaceId;
private Long pageId;
private Integer zanNum;
private Integer viewNum;
private String createUserName;
private String updateUserName;
private Date createTime;
private Date updateTime;
private String spaceName;
private String pageTitle;
private String previewContent;
public Long getPageId() {
return pageId;
}
public void setPageId(Long pageId) {
this.pageId = pageId;
}
public Integer getZanNum() {
return zanNum;
}
public void setZanNum(Integer zanNum) {
this.zanNum = zanNum;
}
public Integer getViewNum() {
return viewNum;
}
public void setViewNum(Integer viewNum) {
this.viewNum = viewNum;
}
public String getCreateUserName() {
return createUserName;
}
public void setCreateUserName(String createUserName) {
this.createUserName = createUserName;
}
public String getUpdateUserName() {
return updateUserName;
}
public void setUpdateUserName(String updateUserName) {
this.updateUserName = updateUserName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getSpaceName() {
return spaceName;
}
public void setSpaceName(String spaceName) {
this.spaceName = spaceName;
}
public String getPageTitle() {
return pageTitle;
}
public void setPageTitle(String pageTitle) {
this.pageTitle = pageTitle;
}
public String getPreviewContent() {
return previewContent;
}
public void setPreviewContent(String previewContent) {
this.previewContent = previewContent;
}
public Long getSpaceId() {
return spaceId;
}
public void setSpaceId(Long spaceId) {
this.spaceId = spaceId;
}
}