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)); } } 复制代码
测试
先初始化全部数据
文章插图
根据mdContent分词查询
文章插图
至此后端的高亮查询已经实现 , 如果与前端结合 , 还需要对查询结果做进一步封装和处理 。
前后端联调
后端构建返回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()); 复制代码
结果展示
文章插图
道阻且长 , 行则将至 。2023 , 扬帆起航 。
原文链接:https://juejin.cn/post/7194734486327099429
【SpringBoot+Vue+ES 实现仿百度全文搜索】
推荐阅读
- 沉香|和田玉黄玉仿古“兽面玉带钩”!刚性十足的若羌黄口料算不算好玉?
- 生肖|下一季度,3个生肖的职场一片光明,有潜力实现目标和职业发展
- 穿衣搭配|陈数厉害了,穿的裤子粗如“水桶”也不显胖,仿佛走路都带风
- 聊聊关于RoCE技术三种实现及应用
- 一文看懂Redisson分布式锁的Watchdog机制源码实现
- MySQL利用int类型高性能实现签到活动
- 深度剖析 Redis 九种数据结构实现原理
- 微信电脑版实现多开,亲测有效
- 抖音小店的真实现状是怎样的?这个项目还能做吗?
- 网络程序计时器通常用啥实现?