项目1在线交流平台-6.Elasticsearch分布式搜索引擎-3.ES结合Kafka应用-开发社区搜索功能
生活随笔
收集整理的這篇文章主要介紹了
项目1在线交流平台-6.Elasticsearch分布式搜索引擎-3.ES结合Kafka应用-开发社区搜索功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 功能需求
- 一、Service層處理操作ES服務器的數據
- 二、Controller層處理帖子添加和評論事件請求
- 1.添加帖子時-觸發事件-發布消息
- 2. 添加評論時-觸發發帖事件-發布消息
- 三、kafka消費者訂閱消息并提交到ES服務器
- 四、處理搜索結果
- 1. Controller處理搜索請求
- 2. 處理模板頁面
- 主頁頭部的搜索欄鏈接
- 搜索網頁設置
- 測試結果:
參考牛客網高級項目教程
狂神說Elasticsearch教程筆記
尚硅谷Elasticsearch教程筆記
功能需求
- 1.在業務層處理好搜索帖子的服務
- 包括保存帖子到ES服務器
- 從服務器中刪除帖子
- 從服務器中查詢帖子
- 2.發布事件
- 在controller層,結合kafka,發布帖子、增加評論時,數據放入消息隊列
- 異步消費消息,將數據同步到ES服務器
- 3.處理模板頁面的顯示,搜索帖子時,根據關鍵字顯示出滿足條件的帖子列表
一、Service層處理操作ES服務器的數據
- 向服務器添加一條帖子
- 刪除一條帖子
- 根據關鍵字查詢帖子列表
- 注意,keyword本身為字符串,不能再加”“號
二、Controller層處理帖子添加和評論事件請求
1.添加帖子時-觸發事件-發布消息
// 發布帖子后,觸發發帖事件-向kafka服務器發布消息 Event event = new Event().setTopic(TOPIC_PUBLISH).setFromUserId(user.getId()).setEntityType(ENTITY_TYPE_POST).setEntityId(discussPost.getId()); eventProducer.sendEvent(event);2. 添加評論時-觸發發帖事件-發布消息
- 因為對帖子發布評論后,帖子的字段需要更新,為保證數據一致性,需要重新發布事件
三、kafka消費者訂閱消息并提交到ES服務器
/*** 消費發布帖子的消息-將帖子數據提交到ES服務器* @param record*/ @KafkaListener(topics = TOPIC_PUBLISH) public void handlePublishMessage(ConsumerRecord record) {// 1.邊界條件:先檢查有無取到消息if (record == null || record.value() == null) {logger.error("消息的內容為空!");return;}// 2.將拿到的消息恢復成Object類型,方便操作Event event = JSONObject.parseObject(record.value().toString(), Event.class);if(event == null) {logger.error("消息的格式錯了!");return;}// 3. 將拿到的消息添加到ES服務器中DiscussPost discussPost = discussPostService.selectPostById(event.getEntityId());elasticSearchService.savePost(discussPost); }四、處理搜索結果
1. Controller處理搜索請求
-
搜索帖子-分頁搜索-頁面默認設置當前頁為1,limit為10
-
注意-需要的分頁信息是-當前頁碼和當前頁數量,
- 與mysql查詢的分頁條件不同(起始行-當前頁顯示多少行)
2. 處理模板頁面
主頁頭部的搜索欄鏈接
<!-- 搜索 --> <form class="form-inline my-2 my-lg-0" method="get" th:action="@{/search}"><input class="form-control mr-sm-2" type="search" aria-label="Search" name="keyword" th:value="${keyword}"/><button class="btn btn-outline-light my-2 my-sm-0" type="submit">搜索</button> </form>搜索網頁設置
<li class="media pb-3 pt-3 mb-3 border-bottom" th:each="map:${discussPosts}"><img th:src="${map.user.headerUrl}" class="mr-4 rounded-circle" style="width:50px;height:50px;" alt="用戶頭像"><div class="media-body"><h6 class="mt-0 mb-3"><a th:href="@{|/discuss/detail/${map.post.id}|}" th:utext="${map.post.title}">備戰<em>春招</em>,面試刷題跟他復習,一個月全搞定!</a></h6><div class="mb-3" th:utext="${map.post.content}">帖子內容</div><div class="text-muted font-size-12"><u class="mr-3" th:utext="${map.user.username}">寒江雪</u> 發布于<b th:text="${#dates.format(map.post.createTime,'yyyy-MM-dd HH:mm:ss')}">2019-04-15 15:32:18</b><ul class="d-inline float-right"><li class="d-inline ml-2">贊 <i th:text="${map.likeCount}">11</i></li><li class="d-inline ml-2">|</li><li class="d-inline ml-2">回復 <i th:text="${map.post.commentCount}">7</i></li></ul></div></div> </li>測試結果:
總結
以上是生活随笔為你收集整理的项目1在线交流平台-6.Elasticsearch分布式搜索引擎-3.ES结合Kafka应用-开发社区搜索功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017战略No.2:开始电子化记账
- 下一篇: prototype.js+ajax+随机