ElasticsearchTemplate 搜索分页 并高亮显示搜索条件

[ElasticSearch系列六] 使用QueryBuilders、NativeSearchQuery实现es数据库对列表的各种操作{多条件,分页,排序,高亮显示(附高亮工具类)等} ElasticsearchTemplate封装ES客户端的一些原生api模板,方便实现一些查询,QueryBuilders是ES中的查询条件构造器,NativeSearchQuery 原生的查询条件类,用来和ES的一些原生查询方法进行搭配,实现一些比较复杂的查询,最终进行构建.build可作为ElasticsearchTemplate. queryForPage的参数使用 阅读详情
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;

    /**
	 * 添加搜索条件
	 * @param doc
	 * @param searchQuery
	 */
	private void withQuery(EsDoc doc,NativeSearchQueryBuilder searchQuery){
		if (!StringUtils.isEmpty(doc.getContent())) {
			BoolQueryBuilder bqb = QueryBuilders.boolQuery();
			if (StringUtils.isEmpty(doc.getSearchtype()) || doc.getSearchtype().equals("1"))
				bqb.must(QueryBuilders.matchPhraseQuery("content", doc.getContent()));
			else if (doc.getSearchtype().equals("2"))
				bqb.must(QueryBuilders.matchQuery("content", doc.getContent()));
			searchQuery.withQuery(bqb);
		}
	}
	
	/**
	 * 添加高亮条件
	 * @param searchQuery
	 */
	private void withHighlight(NativeSearchQueryBuilder searchQuery){
		Field hfield= new HighlightBuilder.Field("content")
				 .preTags("<em style='color:red'>")
				 .postTags("</em>")
				 .fragmentSize(100);
		searchQuery.withHighlightFields(hfield);
	}
	
	/**
	 * 根据搜索结果创建esdoc对象
	 * @param smap
	 * @param hmap
	 * @return
	 */
	private EsDoc createEsDoc(Map<String, Object> smap,Map<String, HighlightField> hmap){
		EsDoc ed = new EsDoc();
		if (smap.get("title") != null)
			ed.setTitle(smap.get("title").toString());
		if (hmap.get("content") != null)
			ed.setContent(hmap.get("content").fragments()[0].toString());
		else if(smap.get("content")!=null)
			ed.setContent(smap.get("content").toString());
		if (smap.get("id") != null)
			ed.setId(smap.get("id").toString());
		return ed;
	}
	
	public Page<EsDoc> getPage(EsDoc doc, HttpServletRequest request, HttpServletResponse response){
		
		Page<EsDoc> esdocpage = new Page<EsDoc>(request, response);
		NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
		//设置索引
		searchQuery.withIndices(index);
		//设置分页
		searchQuery.withPageable(new PageRequest(esdocpage.getPageNo() - 1, esdocpage.getPageSize()));
		//设置高亮
		withHighlight(searchQuery);
		//设置查询条件
		withQuery(doc,searchQuery);
		
		//自定义查询结果封装
		AggregatedPage<EsDoc> page = elasticsearchTemplate.queryForPage(searchQuery.build(), EsDoc.class,
				new SearchResultMapper() {

					@Override
					public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz,
							Pageable pageable) {
						// TODO Auto-generated method stub
						List<T> chunk = new ArrayList<T>();

						for (SearchHit searchHit : response.getHits().getHits()) {
							Map<String, Object> smap = searchHit.getSource();
							Map<String, HighlightField> hmap = searchHit.getHighlightFields();
							chunk.add((T)createEsDoc(smap,hmap));
						}
						
						AggregatedPage<T> result=new AggregatedPageImpl<T>(chunk,pageable,response.getHits().getTotalHits());
						
						return result;
					}
				});

		esdocpage.setList(page.getContent());
		esdocpage.setCount(page.getTotalElements());
		
		return esdocpage;
	}

 

使用elasticSearchTemplate查询进行高亮显示的基本步骤 记录下使用elasticSearchTemplate进行高亮显示的流程 分析 高亮显示是指根据商品关键字搜索商品的时候,显示的页面对关键字给定了特殊样式,让它显示更加突出,如上图商品搜索中,关键字编程了红色,其实就是给定了红色样式。 高亮搜索实现步骤解析 将之前的搜索换掉,换成高亮搜索,我们需要做3个步骤: 1.指定高亮域,也就是设置哪个域需要高亮显示 设置高亮域的时候,需要指定前缀和后缀,也就是关键词用什么html标签包裹,再给该标签样式 2.高亮搜索实现 3.将非高亮数据替换成高亮数据 第1点,例 阅读详情

相关推荐

Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南

本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。

ansible6ops的博客 301

Elasticsearch学习之SearchRequestBuilder常用方法说明

SearchRequestBuilder常用方法说明   (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index;  (2) setTypes(String... types):参数可为一个或多个字符串,表示要进行检索的type,当参数为0个或者不调用此方法时,表示查询所有的type;  setSearchType...

weixin_30252709的博客 2010

MTK pwm beeper配置记录

如果正常,系统启动后会在/dev/input下生成 一个event节点,使用方法参考标准linux使用。dts相关修改如下,全都在里面,注意一下位置。对应的配置文件中增加如下定义。

hclydao的专栏 727

Spring Boot整合Elasticsearch完整版之es索引库完整操作篇

Spring Boot整合Elasticsearch之数据搜索 前一张节我们创建了索引库,并导入了数据到索引库中,本章节我们就开始对索引库的数据操作 1.定义需要返回的数据类型和参数类型 1.1 返回类型为Map<String,Object>类型 2.2 参数类型为Map<String,String>类型 2.Spring Boot操作Es的关键点 2.1 ElasticsearchTemplate 该对象是负责索引库操作的,可以对索引库进行增删改查操作 查询实例 elasticse

mzjmc123的博客 2670

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

Windows下的Geant4安装教程

本教程将从0开始展示在Windows下如何安装Geant4,包括各种辅助工具(QT、Cmake、Visual Studio)的下载安装,环境变量的配置,以及example的生成等。

weixin_49065278的博客 4106

elasticsearch使用template搜索多个索引并且高亮返回结果

es使用template搜索多个索引,高亮返回结果

smilng的博客 1498

自动驾驶传感器选型实战:摄像头、激光雷达与毫米波雷达融合策略

自动驾驶感知系统的核心在于多传感器协同,而非单一技术优劣。摄像头擅长语义识别但受光照和天气制约;激光雷达提供高精度测距却面临成本、温漂与多径干扰等物理瓶颈;毫米波雷达则以全天候鲁棒性与精准测速成为安全底线的守门人。三者融合不是简单叠加,而是基于场景约束(如暴雨、强光、高速跟车)、成本边界(BOM控制)与时间窗口(量产节奏)的工程权衡。真实量产方案中,‘纯视觉’实为视觉主责+毫米波兜底,‘激光雷达上车’本质是用硬件真值加速算法迭代,而传统车企更倾向以毫米波为仲裁者协调冲突。理解这些底层原理,才能在传感器选型、

weixin_32495691的博客 276

es分页查询的两种方式

例:查询条件:(Integer page, Integer size, String order, List<String> msgidList, String sid, String date) 1.elasticsearchTemplate <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta

zxx2096的博客 3029

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1896

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 299

第7章商品搜索

第7章 商品搜索 学习目标 根据搜索关键字查询 条件筛选 规格过滤 价格区间搜索 分页查询 排序查询 高亮查询 1 根据关键字查询 (1) changgou_service_search项目创建SearchService接口 public interface SearchService { /** * 全文检索 * @param paramMap 查询参数 * @return */ public Map search(Map<String

happy_de_goudan的博客 217

FMEA-MSR步骤三:功能分析

目的 FMEA-MSR功能分析的主要目标: ● 功能及各功能之间的关系的可视化 ● 功能树/网络或等效功能矩阵参数图(P图) ● 顾客(外部和内部)功能与相关要求的关联 ● 要求或特性与功能的关联 ● 工程团队(系统、安全和组件)之间的协作 ● 失效分析步骤的基础 (点击链接进入官网领取软件试用) 在监视及系统响应的补充FMEA中,对失效探测和失效响应的监视视为其具有的功能。硬件和软件功能可能包括监视控制状态的功能。 故障/失效的监视和探测功能可能包括超出范围的探测、循环冗余校验、真实性检查和序列计数器检查

Infomass的博客 2390

ElasticsearchTemplate实现高亮搜索

ElasticsearchTemplate实现高亮搜索 1 前言 搜索关键字高亮显示已经变成搜索不可缺少的一个部分,那当然我的搜索肯定也要有这样的功能塞,这样才能够显示我的高端不是吗(ಥ_ಥ) ###2 Elasticsearch高亮基础 想要使用elasticsearchTemplate实现高亮搜索,肯定需要了解一下原本elasticsearch怎么高亮搜索,结果又是怎样的。 搜索语句结构 GE...

nero_claudius的博客 2310

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ElasticsearchTemplate的详细使用,完成多条件查询、匹配度查询等

ElasticsearchTemplate是Spring对ES的java api进行的封装,提供了大量的相关的类来完成各种各样的查询。在日常的使用中,应该说最常用的查询就是queryList方法。 public <T> List<T> queryForList(SearchQuery query, Class<T> clazz) { return...

qq_16436555的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

springboot整合Elasticsearch - 实现全局高亮分页搜索

spring boot整合ES的方式目前常见的有两种,一种是使用`spring data elasticsearch`,一种就是使用`elasticsearchTemplate`进行整合。如对搜索没有高亮需求,用前者即可,如有高亮需求,则必须使用后者。读它!将带着你一步步实现ES高亮检索!

doufuplus 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ElasticsearchTemplate实现ES读写操作

1 实现的读写操作 1.1 一般操作 package com.lenovo.qes.portal.modules.knowledge.demo.service.impl; import com.alibaba.fastjson.JSON; import com.lenovo.qes.portal.modules.knowledge.demo.document.ProductDocument; import com.lenovo.qes.portal.modules.knowledge.demo.repos

日日留心的技术专栏 2647

十、SpringBoot中使用 ElasticsearchTemplate 实施高亮搜索

  ElasticsearchTemplate是Springboot为我们自动装载的Elasticsearch模板,使用该模板,基本可以满足我们的搜索需求!   案例背景介绍:用户输入一个关键词:“历史”,要求同时在索引库中“name”、“author”、&quot;category&quot;三个字段进行搜索。 package com.yuedu.service; import com.yuedu.dao.Boo...

panchang199266的博客 7177

05高亮显示

5.高亮显示 5.1高亮分析 高亮显示是指根据商品关键字搜索商品的时候,显示的页面对关键字给定了特殊样式,让它显示更加突出,如上图商品搜索中,关键字编程了红色,其实就是给定了红色样式。 5.2高亮搜索实现步骤分析 将之前的搜索换掉,换成高亮搜索,我们需要做3个步骤: 1.指定高亮域,也就是设置哪个域需要高亮显示 设置高亮域的时候,需要指定前缀和后缀,也就是关键词用什么html标签包裹,再给该标...

痞子王的博客 931

Elasticsearch:ElasticsearchTemplate初始化数据,计数,搜索和分页

Elasticsearch:ElasticsearchTemplate初始化数据,计数,搜索和分页

程序员无羡的博客 513

elasticsearchTemplate 根据id主键进行操作

代码罗列如下 /** * 根据ID批量查询数据 * * @param index 数据所在索引 * @param ids id清单 * @author: leiming5 */ @Override public List<ProcessEsVo> queryBatch(String index, List<String> ids) { Client client = elasti

日日留心的技术专栏 3352

【ElasticSearch】RestClient和ElasticsearchTemplate实现高亮查询

在查询的时候希望,查询结果中的包含查询关键字高亮。(Es版本,6.5.4) 前提准备,首先建立mapping POST http://47.101.167.46:9200/hello_es/doc/_mapping { "properties": { "name": { "type": "text", "analyzer":"ik_max_word", ...

batman 2253

elasticsearchTemplate

添加索引 elasticsearchTemplate.createIndex(“索引名称”); 删除索引 elasticsearchTemplate.deleteIndex(“索引名称”); 创建索引类型(相当于创建表中数据字段及类型) elasticsearchTemplate.putMapping(Sku.class); 这个对象,所有字段需要加上@Field标注,然后给与对应的类型,类...

不踩蚂蚁的大象 4139

ElasticsearchRepository vs ElasticsearchTemplate:如何选择最适合你的ES操作方式?

本文深入对比了Spring Data Elasticsearch中ElasticsearchRepository与ElasticsearchTemplate两种核心数据访问方式。ElasticsearchRepository采用声明式接口,极大提升开发效率,适合标准CRUD与简单查询;而ElasticsearchTemplate提供底层灵活控制,适用于复杂搜索、聚合分析等高级场景。文章通过核心理念、适用场景与性能维护性分析,为开发者提供了清晰的选型决策框架。

pink7的博客 185

关于使用ElasticSearchTemplate查询,范围查询,排序的使用

/** * 房源信息搜索 * @param searchVo * @return */ @Override public PageResult searchHouses(RentHouseSearchVo searchVo) { BoolQueryBuilder boolQueryBuilder = QueryBuilders...

weixin_45528987的博客 4521

【电商项目】商品搜索开发复盘(3):搜索与封装实现逻辑思考与编写

本文介绍了商品搜索功能的实现步骤:1. 通过buildQuery方法构造Elasticsearch搜索条件;2. 使用ElasticsearchTemplate执行搜索;3. 将ES返回的SearchHits结果转换为List后,再封装为MyBatis-Plus的Page对象,便于前端统一处理;4. 最终将查询结果、参数和面板封装到GoodsSearchResult对象返回。其中重点说明了为什么要进行两次结果转换,以及如何构建分页对象。查询面板的封装将在后续文章中详细介绍。

2601_95808841的博客 337
上一篇: iframe 利用postMessage 跨域通信
下一篇: mysql 添加字段
knife1220
博客等级 码龄15年 33粉丝 176原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值