springboot ElasticSearch 簡單的全文檢索高亮

前陣子和張三豐聊天提到了es。這次正好有機會學習并使用

首先引入依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置文件

spring.data.elasticsearch.local=true
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-name=yourname
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

然后 創建接口并繼承ElasticsearchRepository

idea 類繼承 ElasticsearchRepository

package com.school.service;import com.school.model.Idea;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;@Component
public interface IdeaRepository extends ElasticsearchRepository<Idea, Long> {
}

下一步在需要使用的service 或 Controller中 引用

    @Autowiredprivate IdeaRepository ideaRepository;      //esjap類@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;    //es工具

使用save方法把數據保存到es中
業務代碼忽略... 保存就完事了

public void save(Long ideaId) {// 插入數據到es中Idea idea = this.selectById(ideaId);idea.setId(ideaId);ideaRepository.save(idea);}

全文檢索并高亮數據

這里注意分頁的頁數是從0開始... 搞得我以為沒查到數據debug了很久

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.SearchResultMapper;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;@Autowiredprivate IdeaRepository ideaRepository;      //esjap類@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;    //es工具/*** 從es檢索數據** @param content  搜索關鍵字* @param pageNum  頁* @param pageSzie 條* @return*/
public AggregatedPage<Idea> getIdeaListBySrt(String content, Integer pageNum, Integer pageSzie) {Pageable pageable = PageRequest.of(pageNum, pageSzie);String preTag = "<font color='#dd4b39'>";//google的色值String postTag = "</font>";SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("ideaTitle", content)).withQuery(matchQuery("ideaContent", content)).withHighlightFields(new HighlightBuilder.Field("ideaTitle").preTags(preTag).postTags(postTag),new HighlightBuilder.Field("ideaContent").preTags(preTag).postTags(postTag)).build();searchQuery.setPageable(pageable);// 不需要高亮直接return ideas // AggregatedPage<Idea> ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class);// 高亮字段AggregatedPage<Idea> ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class, new SearchResultMapper() {@Overridepublic <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {List<Idea> chunk = new ArrayList<>();for (SearchHit searchHit : response.getHits()) {if (response.getHits().getHits().length <= 0) {return null;}Idea idea = new Idea();//name or memoeHighlightField ideaTitle = searchHit.getHighlightFields().get("ideaTitle");if (ideaTitle != null) {idea.setIdeaTitle(ideaTitle.fragments()[0].toString());}HighlightField ideaContent = searchHit.getHighlightFields().get("ideaContent");if (ideaContent != null) {idea.setIdeaContent(ideaContent.fragments()[0].toString());}chunk.add(idea);}if (chunk.size() > 0) {return new AggregatedPageImpl<>((List<T>) chunk);}return null;}});return ideas;}

其他基礎接口直接使用 ideaRepository.

高亮寫法借鑒代碼地址點我
其他方式查詢寫法地址點我

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScriptSerializer類 對象序列化為JSON,JSON反序列化為對象

JavaScriptSerializer 類由異步通信層內部使用&#xff0c;用于序列化和反序列化在瀏覽器和 Web 服務器之間傳遞的數據。說白了就是能夠直接將一個C#對象傳送到前臺頁面成為javascript對象。要添加System.Web.Extensions.dll的引用。該類位于System.Web.Script.Serialization命…

nodejs 實踐:express 最佳實踐(六) express 自省獲得所有的路由

nodejs 實踐&#xff1a;express 最佳實踐(六) express 自省獲得所有的路由 某些情況下&#xff0c;你需要知道你的應用有多少路由&#xff0c;這在 express 中沒有方法可以。因此我這邊曲線了一下&#xff0c;做成了一個函數進行處理。遍歷所有的方法進行處理。 代碼 const _ …

使用vue組件搭建網頁應用

使用vue組件搭建網頁應用搭建開發環境開發組件搭建開發環境 搭建一個 vue 項目最快的方式就是使用 vue cli 腳手架進行初始化&#xff0c;包含了所有完整的依賴及開發配置。 首先全局安裝 vue cli&#xff0c;打開 cmd 命令提示符 或者 power shell&#xff0c;輸入以下命令&…

重新整理 .net core 實踐篇 —linux上排查問題實用工具 [外篇]

前言介紹下面幾個工具:Lldbcreatedumpdotnet-dumpdotnet-gcdumpdotnet-symbolProcdump該文的前置篇為:https://www.cnblogs.com/aoximin/p/16839812.html獻給初學者&#xff0c;這篇就只介紹下看下日志和lldb&#xff0c;畢竟東西太多了。正文我以官網的例子作為演示&#xff1…

Office 365離線安裝

Office 365除了可以在線安裝外&#xff0c;還可以進行離線安裝&#xff0c;但激活還是需要連接互聯網的喲首先下載Office部署工具https://www.microsoft.com/en-us/download/details.aspx?id49117 下載文件后&#xff0c;運行自解壓縮可執行文件&#xff0c;其中包含 Office 部…

reduceByKey和groupByKey區別與用法

2019獨角獸企業重金招聘Python工程師標準>>> 在Spar看中&#xff0c;我們知道一切的操作都是基于RDD的。在使用中&#xff0c;RDD有一種非常特殊也是非常實用的format——pair RDD&#xff0c;即RDD的每一行是&#xff08;key, value&#xff09;的格式。這種格式很…

python自動化測試-D6-學習筆記之一(常用模塊補充datetime模塊)

# datetime 模塊import datetimeprint(datetime.datetime.today()) #當前日期&#xff0c;到秒 打印結果&#xff1a;2018-01-21 10:23:46.034410print(datetime.datetime.now()) # 當前日期&#xff0c;到秒 打印結果&#xff1a;2018-01-21 10:23:46.034410print(datetime.d…

Vue如何在data中正確引入圖片路徑

方法一&#xff1a;將圖片資源放入項目 /static 目錄下&#xff0c;使用絕對或相對路徑引用即可 // 文件結構 |-- src | |-- components | | |-- banner.vue |-- static | |-- images | | |-- pic.jpg<template><div id"banner"><img :s…

軟件工程的第一性原理丨SmartIDE

作者&#xff1a;徐磊原文地址&#xff1a;https://smartide.cn/zh/blog/2022-1022-software-engineering/徐磊英捷創軟科技&#xff08;北京&#xff09;有限公司創始?/?席架構師 / CEO / SmartIDE開源項?創始?。微軟最有價值專家MVP&#xff0c;微軟區域技術總監&#xf…

排序算法之快速排序詳解

一、算法介紹 快速排序&#xff1a;快速排序的基本思想是通過一次排序將等待的記錄分成兩個獨立的部分&#xff0c;其中一部分記錄的關鍵字小于另一部分的關鍵字。C部分的快速排序一直持續到整個序列被排序。 任取一個元素 (如第一個) 為中心提出所有小于它的元素&#xff0c;并…

openstack 中國聯盟公開課參會總結

主流趨勢 1. openstack defcore 互操作性認證。打通不同的openstack 廠商之間的連接2. 首批OpenStack管理員認證(COA)將于2016年進行3. 混合云應用廣泛 Cloud Broker,cascading openstack 云連接器4. DevOps5. 虛擬桌面6. Storage 方面&#xff0c;Ceph和Glusterfs 7. Network…

bzoj1088[SCOI2005]掃雷Mine

1088: [SCOI2005]掃雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4284 Solved: 2552[Submit][Status][Discuss]Description 相信大家都玩過掃雷的游戲。那是在一個n*m的矩陣里面有一些雷&#xff0c;要你根據一些信息找出雷來。萬圣節到了&#xff0c;“余”人國流…

Re:從零開始的Vue項目搭建

Re&#xff1a;從零開始的Vue項目搭建初始的終結與結束的開始Nodejs項目的簡單測試從零開始webpack開發模式webpack編譯打包后記初始的終結與結束的開始 最開始接觸vue項目搭建是從vue-cli開始&#xff0c;模板式操作&#xff0c;一鍵搞定&#xff0c;幾乎可以無縫進入代碼開發…

在數據庫插入帶小數點數據的問題

想在mysql插入以下數據設計表的時候沒有注意,之前都用的int,這次換成了double,但是插入第一條3.50的時候數據庫顯示為:查了之后知道是設計表的時候沒有注意小數點的設置轉載于:https://juejin.im/post/5c0f61bb6fb9a049ea38cbe9

oracle 11g 創建 job 20

15-10-19 23:48:04分類&#xff1a; Oracle--創建一次執行的匿名塊任務&#xff0c;成功調用一次后job消失BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name > my_new_job2, job_type > PLSQL_BLOCK, job_action &g…

Jzoj5317 Func

f(1)1 f(2x)f(x) f(2x1)f(x)f(x1) 給出n<10^6&#xff0c;求:所有的i滿足f(i)n 第一道類歐算法 我們考慮一個性質 f(2x1)f(x)f(x1)f(2x)f(2x2) 所以&#xff0c;顯然有f(2x1)>f(2x) f(2x1)>f(2x2) 那么現在我們知道了f(2x1),自然考慮枚舉一個f(2x) 可以按照以下形式…

C# WPF 用代碼畫一幅圖(*精品*)

概述有時候我們的程序界面中需要顯示一些簡單的示意圖&#xff0c;一般我們有原圖的話直接嵌入我們程序就可以&#xff0c;但有時候我們沒有原圖&#xff0c;這時候我們不妨用代碼自己畫出來.今天小編要給大家展示的是這樣一副圖片&#xff1a;接下來&#xff0c;我就用代碼純手…

礦難讓顯卡壓了那么多貨咋辦?NV如是說

2019獨角獸企業重金招聘Python工程師標準>>> 在蘇州 GTC 開幕的幾天前&#xff0c;英偉達剛剛遭遇了一次股價的腰斬。 近來加密貨幣的熱度漸低&#xff0c;受到挖礦熱潮照顧許多的英偉達「礦機」銷量受到打擊&#xff0c;甚至出現了嚴重的庫存危機&#xff0c;加上近…

花式看超級碗 人工智能、大數據在碗里

“超級碗”可不是一個大碗!!!超級碗(Super Bowl)是美國國家美式足球聯盟(也稱為國家橄欖球聯盟)的年度冠軍賽&#xff0c;勝者被稱為“世界冠軍”。超級碗一般在每年1月最后一個或2月第一個星期天舉行&#xff0c;那一天稱為超級碗星期天(Super Bowl Sunday)。超級碗是比賽的名…

Git分支操作與遠程倉庫的使用

Git分支操作本地倉庫創建分支合并分支刪除分支遠程倉庫push 推送遠程分支pull 拉取遠程分支fetch 更新遠程分支本地分支與遠程分支的跟蹤關系本地倉庫 由于Git的分布式特性&#xff0c;所以沒有絕對的本地和遠程概念&#xff0c;一切都是相對的。對于分支的操作&#xff0c;個…