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.mzph.cn/news/281351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

JavaScriptSerializer 类由异步通信层内部使用&#xff0c;用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。说白了就是能够直接将一个C#对象传送到前台页面成为javascript对象。要添加System.Web.Extensions.dll的引用。该类位于System.Web.Script.Serialization命…

使用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;的格式。这种格式很…

软件工程的第一性原理丨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…

Re:从零开始的Vue项目搭建

Re&#xff1a;从零开始的Vue项目搭建初始的终结与结束的开始Nodejs项目的简单测试从零开始webpack开发模式webpack编译打包后记初始的终结与结束的开始 最开始接触vue项目搭建是从vue-cli开始&#xff0c;模板式操作&#xff0c;一键搞定&#xff0c;几乎可以无缝进入代码开发…

C# WPF 用代码画一幅图(*精品*)

概述有时候我们的程序界面中需要显示一些简单的示意图&#xff0c;一般我们有原图的话直接嵌入我们程序就可以&#xff0c;但有时候我们没有原图&#xff0c;这时候我们不妨用代码自己画出来.今天小编要给大家展示的是这样一副图片&#xff1a;接下来&#xff0c;我就用代码纯手…

矿难让显卡压了那么多货咋办?NV如是说

2019独角兽企业重金招聘Python工程师标准>>> 在苏州 GTC 开幕的几天前&#xff0c;英伟达刚刚遭遇了一次股价的腰斩。 近来加密货币的热度渐低&#xff0c;受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击&#xff0c;甚至出现了严重的库存危机&#xff0c;加上近…

花式看超级碗 人工智能、大数据在碗里

“超级碗”可不是一个大碗!!!超级碗(Super Bowl)是美国国家美式足球联盟(也称为国家橄榄球联盟)的年度冠军赛&#xff0c;胜者被称为“世界冠军”。超级碗一般在每年1月最后一个或2月第一个星期天举行&#xff0c;那一天称为超级碗星期天(Super Bowl Sunday)。超级碗是比赛的名…

SimMechanics/Second Generation倒立摆模型建立及初步仿真学习

笔者最近捣鼓Simulink&#xff0c;发现MATLAB的仿真模块真的十分强大&#xff0c;以前只是在命令窗口敲点代码&#xff0c;直到不小心敲入simulink&#xff0c;就一发不可收拾。话说simulink的模块化建模确实方便&#xff0c;只要拖拽框框然后双击设置属性就可以慢慢堆建自己的…

10 行代码提取复杂 Excel 数据

把 Excel 文件导入关系数据库是数据分析业务中经常要做的事情&#xff0c;但许多 Excel 文件的格式并不规整&#xff0c;需要事先将其中的数据结构化后再用 SQL 语句写入数据库。而一般情况下&#xff0c;结构化的工作量会比较大&#xff0c;而且很难通用&#xff0c;每次都要针…

人工智能模型的网络结构可视化

本文主要介绍人工智能模型的网络结构可视化的常见方法。对于使用神经网络模型来说&#xff0c;我们主要关注的是模型的输入和输出。在 ML.NET 中使用 ONNX 模型时&#xff0c;我们就需要了解这些信息&#xff0c;以便在构成神经网络的所有层之间生成连接映射。下图就是昨天 《Y…

整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例

http://2sharings.com/2015/asp-net-mvc-5-custom-404-500-error-hanlde https://blog.csdn.net/yhyhyhy/article/details/51003683 ASP.NET MVC 5的开发中&#xff0c;服务器的各种错误[如&#xff1a;401&#xff08;登录授权验证&#xff09;&#xff0c;403&#xff08;禁止…

编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起

Visual Studio Code&#xff08;VS Code&#xff09;的使用率在迅速上升&#xff0c;现在已经成为大多数工程师的首选编辑器&#xff0c;并似乎正迅速抢占其他顶级编辑的市场份额。Triplebyte 每周都会面试数百名工程师。在每次面试中&#xff0c;我们都会记录面试者使用的编辑…

C#7.0 ref引用传递

1.概要在工作中大家用到引用类型是非常多的&#xff0c;大家都知道引用类型在使用过程中传递的是对象引用并不会发生整个对象复制。而值类型在传递的过程中就不一样了&#xff0c;我曾经在编写代码时希望通过值类型来压低应用程序的内存占用&#xff0c;在高并发的情况大量的对…

android面试详解

前台就是和用户交互的进程 可见进程例如一个activity被一个透明的对话框覆盖&#xff0c;该activity就是可见进程 服务&#xff1a;service进程 后台一个activity按了home按键就是从前台退回到后台 标准模式&#xff1a;不管任务栈是否存在相同的activity都会创建一个新的activ…

element-ui Notification重叠问题,原因及解决办法

在1个方法中调用两次this.$notify方法&#xff0c;会出现通知框重叠的问题 methods: {checkLogin: function () {if (this.username ) {this.$notify({title: 提示,message: 请输入用户名})}if (this.password ) {this.$notify({title: 提示,message: 请输入用户密码})}}}网上…