SpringBoot+Vue+ES 实现仿百度全文搜索( 三 )


controller
@RestController @RequestMapping("/es") @Slf4j @RequiredArgsConstructor public class EsRestController { private final CodeNoteService noteService; @PostMapping("/init") public Result createIndex() { noteService.init(); return Result.success("init all notes success"); } @GetMapping("/note/getByContent") public Result> getByContent(@RequestParam("content")String content) { return Result.success(noteService.getFromEsByContent(content)); } } 复制代码
测试
先初始化全部数据

SpringBoot+Vue+ES 实现仿百度全文搜索

文章插图

根据mdContent分词查询

SpringBoot+Vue+ES 实现仿百度全文搜索

文章插图

至此后端的高亮查询已经实现 , 如果与前端结合 , 还需要对查询结果做进一步封装和处理 。
前后端联调
后端构建返回VO
public class EsCodeNoteRes { private Long id; /** * 题目 */ private String esTitle; private String author; /** * md文本 */ private String esContent; /** * html文本 */ private String htmlContent; // 省略部分 /** * 发布时间 */ @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private Date publishTime; } 复制代码
对返回的结果封装
SearchHits searchHits = esRestTemplate.search(query, EsCodeNote.class); return searchHits.stream().map(search -> { EsCodeNote esCodeNote = search.getContent(); search.getHighlightFields().forEach((k, v) -> { log.info("highlight key is [{}],content is [{}]", k, v.get(0)); // 分别处理标题和正文 if (k.equals("title")) { esCodeNote.setTitle(v.get(0)); } if (k.equals("mdContent")) { esCodeNote.setMdContent(v.get(0)); } }); // 如果正文里没有关键字 , 取前100字符 if (!esCodeNote.getMdContent().contains(postTag)){ esCodeNote.setMdContent(esCodeNote.getMdContent().substring(0,100)); } return EsCodeNoteRes.builder() .id(esCodeNote.getId()) .esTitle(esCodeNote.getTitle()) .author(esCodeNote.getAuthor()) .esContent(esCodeNote.getMdContent()) .htmlContent(esCodeNote.getHtmlContent()) .summary(esCodeNote.getSummary()) .category(esCodeNote.getCategory()) .createTime(esCodeNote.getCreateTime()) .publishTime(esCodeNote.getPublishTime()) .build(); }).collect(Collectors.toList()); 复制代码
结果展示
SpringBoot+Vue+ES 实现仿百度全文搜索

文章插图
 
道阻且长 , 行则将至 。2023 , 扬帆起航 。
原文链接:https://juejin.cn/post/7194734486327099429

【SpringBoot+Vue+ES 实现仿百度全文搜索】


推荐阅读