关键字高亮查询

1.1.1 需求分析

所谓高亮,就是使用特别的样式修饰某字段中包含的搜索关键字。

需求:实现搜索高亮,商品名称使用红色显示搜索关键字。

1.1.2实现思路

使用默认高亮显示来获取每个搜索命中title字段的高亮显示,在指定title字段的查询请求中包含高亮显示对象。

1.1.3 代码实现

(1)changgou_service_search工程接口 SearchService 新增方法定义

/*** 全文检索* @param paramMap  查询参数* @return*/public Map search(Map<String, String> paramMap) throws Exception;

(2)SearchServiceImpl 实现此方法,实现关键字查询

package com.changgou.service;import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
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.stereotype.Service;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author :lijunxuan* @date :Created in 2019/7/17  19:00* @description :* @version: 1.0*/
@Service
public class SearchServiceImpl implements SearchService {@Autowiredprivate RestHighLevelClient restHighLevelClient;@Overridepublic Map search(Map<String, String> paramMap) throws Exception {Map<String,Object> resultMap=new HashMap<>();/*** 1.获取查询参数*/String keywords = paramMap.get("keywords");/*** 2.获取查询需要的对象*///创建查询对象,指定索引库名称,_indexSearchRequest searchRequest = new SearchRequest("sku");//指定查询索引库中的类型searchRequest.types("doc");//创建查询构造对象SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//创建布尔查询(组合查询对象)BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();/*** 3.设置根据关键字查询(关键字需要中文分词)*/MatchQueryBuilder nameQueryBuilder = QueryBuilders.matchQuery("name", keywords);//根据名称查询条件放入组合查询对象中boolQueryBuilder.must(nameQueryBuilder);/*** 4. 设置高亮查询*/HighlightBuilder highlightBuilder = new HighlightBuilder();//设置在哪个域中高亮显示highlightBuilder.field("name");//设置高亮前缀highlightBuilder.preTags("<em style=\"color:red\">");//设置高亮后缀highlightBuilder.postTags("</em>");searchSourceBuilder.highlighter(highlightBuilder);/*** 12.查询并返回的结果*///将组合查询条件放入查询构造对象中searchSourceBuilder.query(boolQueryBuilder);//将组合查询条件放入查询请求中searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);/*** 13. 获取查询到的结果集, 封装后返回*/SearchHits searchHits = searchResponse.getHits();//获取查询到的总条数long totalHits = searchHits.getTotalHits();resultMap.put("total",totalHits);//获取查询结果集SearchHit[] hits = searchHits.getHits();List rows = new ArrayList<>();if (hits!=null){for (SearchHit hit : hits) {//获取普通的查询出来的一条数据(不带高亮名称)Map<String, Object> sourceAsMap = hit.getSourceAsMap();//获取高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (highlightFields != null) {HighlightField highlightField = highlightFields.get("name");Text[] fragments = highlightField.fragments();if (fragments != null && fragments.length > 0) {//将高亮名称放入查询出来的数据中, 覆盖原来不带高亮的名称sourceAsMap.put("name", fragments[0].toString());}}rows.add(sourceAsMap);}}resultMap.put("rows",rows);return resultMap;}
}

(3)changgou_service_search新增SearchController类

package com.changgou.controller;import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.service.EsManagerService;import com.changgou.service.SearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;/*** @author :lijunxuan* @date :Created in 2019/7/14  21:41* @description :* @version: 1.0*/
@RestController
@RequestMapping("/search")
public class SearchController {@Autowiredprivate SearchService searchService;/*** 全文检索* @return*/@GetMappingpublic Result search(@RequestParam Map<String, String> paramMap) throws Exception {Map resultMap = searchService.search(paramMap);return new Result(true, StatusCode.OK, "查询成功", resultMap);}
}

1.1.4测试结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333045.shtml

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

相关文章

jep和jsr_JEP 342:JVM和幽灵

jep和jsrJEP 342 &#xff08;“限制推测执行”&#xff09;已从“ 草稿 ”状态转换为“ 候选 ”状态&#xff0c;但尚未针对特定的JDK版本&#xff08;请参见图形以了解JEP流程中的步骤 &#xff09;。 Jesper Wilhelmsson 写道 &#xff0c; JEP 342 “涵盖了使用新的C 编译器…

执行SQL脚本文件

文章目录一、登录数据库后&#xff0c;执行命令 source二、未登录数据库&#xff0c;执行命令 mysql一、登录数据库后&#xff0c;执行命令 source mysql> source /root/test/test.sql;二、未登录数据库&#xff0c;执行命令 mysql [roothtlwk0001host ~]# mysql -uroot -…

linux使jdk开机可用_JDK 11的一般可用性

linux使jdk开机可用按计划&#xff0c;这是今天宣布的是JDK 11被释放的通用性 。 本周初&#xff0c;Iris Clark宣布了“ JSR 384&#xff08;Java SE 11&#xff09;最终发行版 ”&#xff0c;并且在同一封邮件中引用了JSR 384的最终发行版&#xff0c;并引用了“ Java SE 11&…

实现搜索分页功能

1.1 需求分析 实现搜索分页功能&#xff0c;每页显示30条记录。实现商品列表下方分页栏。 1.2 实现思路 前端向后端传递参数 pageNo &#xff08;页码&#xff09; 1.3 代码实现 修改SearchServiceImpl的search方法&#xff0c;在第1段代码中添加代码 package com.changg…

MySQL的set names命令详解

执行下面的命令&#xff1a; mysql> set names charset_name;相当于执行了下面三条命令语句&#xff1a; mysql> SET character_set_client charset_name; mysql> SET character_set_results charset_name; mysql> SET character_set_connection charset_name…

aws ec2 跨帐号共享_AWS共享资源的警告

aws ec2 跨帐号共享最近&#xff0c;我一直在发布一个新版本&#xff0c;与往常一样&#xff0c;通过将DNS记录切换为指向以前的“备用”组的负载平衡器来利用蓝绿色部署 。 但是在切换DNS之前&#xff0c;我检查了新发布版本的日志并发现了一些奇怪的现象– Web框架&#xff0…

MySQL数据库模式_SQL模式

文章目录查看 MySQL 当前的 SQL 模式设置 MySQL 的 SQL 模式SQL 模式介绍TRADITIONAL&#xff08;传统模式&#xff09;STRICT&#xff08;严格模式&#xff09;ANSI 模式MySQL 服务器可以以不同的 SQL 模式来操作&#xff0c;并且可以为不同客户端应用不同模式。这样每个应用程…

spring http缓存_HTTP缓存与Spring示例

spring http缓存缓存是HTTP协议的强大功能&#xff0c;但由于某些原因&#xff0c;它主要用于静态资源&#xff0c;例如图像&#xff0c;CSS样式表或JavaScript文件。 但是&#xff0c;HTTP缓存不仅限于应用程序的资产&#xff0c;因为您还可以将其用于动态计算的资源。 只需少…

分类列表查询

1 需求分析 以关键字作为查询条件&#xff0c;查询结果中包含的商品分类&#xff0c;在页面中显示出来 2 实现思路 &#xff08;1&#xff09;商品分类列表的显示使用聚合查询 &#xff08;2&#xff09;使用过滤查询 3 代码实现 修改SearchServiceImpl的search方法&…

用户微服务-用户注册 发送短信验证码

1 需求分析 注册账号&#xff0c;用手机号注册&#xff0c;填写后发送短信验证码&#xff0c; 填写短信验证码正确方可注册成功。 2 实现思路 1&#xff09;用户微服务生成6位的短信验证码&#xff0c;存入redis &#xff08;以code_手机号为key&#xff09;&#xff0c;再发…

jdk 流合并_JDK 12,合并的收集器和命名的挑战

jdk 流合并看来可能是一种新的方法&#xff0c;将可在java.util.streams.Collectors类JDK 12即会&#xff0c;根据新方法的提出了基于Javadoc的文档&#xff0c;“返回一个收藏家是将输入的元素两个规定的收藏家并将其结果与指定的合并功能合并。” 目前 &#xff0c;此新Colle…

MySQL配置变量log-bin,重启数据库服务失败

在配置文件 /etc/my.cnf 添加变量 log-bin&#xff1a; log-bin/var/lib/mysql/mybinlog/mysql-bin重启数据库服务报错&#xff1a; [roothtlwk0001host lib]# systemctl start mysqld.service Job for mysqld.service failed because the control process exited with error…

javafx 调用java_Java,JavaFX的流畅设计风格滑块

javafx 调用javaJMetro的Java&#xff0c;JavaFX主题版本刚刚提高到4.2版。 此版本为Slider控件带来了新样式。 除此之外&#xff0c;您现在还可以看到一个弹出窗口&#xff0c;向您显示滑块的当前值。 新滑块样式 以下是旧的JMetro Slider样式&#xff1a; 滑块OLD JMetro灯…

WebService入门介绍

参考文献&#xff1a; https://blog.csdn.net/cs_hnu_scw/article/details/80181762 创建服务器webService package com.william.TestWebService; import javax.jws.WebService; import javax.xml.ws.Endpoint;WebService public class MyFirstWebService {/*** 定义webservi…

手游建筑美术资源_建筑商和机械手

手游建筑美术资源下面是命名的OOP方法&#xff0c;这我想在我的代码遵循一个简单的原则&#xff1a;这是一个动词 &#xff0c;如果它操纵 &#xff0c;这是一个名词 &#xff0c;如果它的基础之上 。 而已。 两者之间什么都没有。 诸如saveFile()或getTitle()不适合使用&#…

MySQL二进制日志文件的用法_数据恢复

文章目录开启二进制日志功能关闭/打开二进制日志记录刷新二进制日志文件查看二进制日志文件的存储位置利用二进制日志文件恢复数据的本质二进制日志提取/导出到脚本文件中查看当前二进制日志的最后一个位置查看二进制日志文件的内容执行 SQL 脚本文件以恢复数据二进制日志分析指…

启动weblogic需要账号密码问题

<Server is Running in Production Mode and Native Library(terminalio) to read the password securely from commandline is not found.> 解决方法 在weblogic路径下创建 \weblogic11\user_projects\domains\base_domain\servers\AdminServer\security 目录下创建bo…

mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8mb4‘

错误提示&#xff1a; [roothtlwk0001host ~]# mysqlbinlog /var/lib/mysql/mybinlog/mysql-bin.000004 mysqlbinlog: [ERROR] unknown variable default-character-setutf8mb4原因&#xff1a; mysqlbinlog 这个工具无法识别 binlog 中的配置中的 default-character-setutf8m…

Mybatis一对一结果映射

目录结构 创建数据库相应的表 一个账户对应一个用户 accout CREATE TABLE account (aid int(11) NOT NULL AUTO_INCREMENT,accountname varchar(20) DEFAULT NULL,money float(10,2) DEFAULT NULL,userId int(11) DEFAULT NULL,PRIMARY KEY (aid),KEY userId (userId),CONSTR…

lambda表达式java_Lambda表达式Java教程

lambda表达式java在本文中&#xff0c;我们提供了全面的Lambda Expressions Java教程。 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能之一。Lambda表达式被认为是Java进入函数式编程世界的第一步 。 可以将其视为无需类即可创建的函数…