实现搜索分页功能

1.1 需求分析

实现搜索分页功能,每页显示30条记录。实现商品列表下方分页栏。

1.2 实现思路

前端向后端传递参数 pageNo (页码)

1.3 代码实现

修改SearchServiceImpl的search方法,在第1段代码中添加代码

package com.changgou.service;import org.apache.commons.lang.StringUtils;
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;//设置每页查询条数据public final static Integer PAGE_SIZE = 4;@Overridepublic Map search(Map<String, String> paramMap) throws Exception {Map<String,Object> resultMap=new HashMap<>();/*** 1.获取查询参数*///查询关键字String keywords = paramMap.get("keywords");//当前页数String pageNo = paramMap.get("pageNo");/*** 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);/*** 5. 设置分页查询*/if (StringUtils.isEmpty(pageNo)) {paramMap.put("pageNo", "1");resultMap.put("pageNo", "1");}Integer pageNoTemp = Integer.parseInt(pageNo);if (pageNoTemp < 1) {paramMap.put("pageNo", "1");resultMap.put("pageNo", "1");pageNoTemp = 1;}//从第几条开始查询Integer start = (pageNoTemp - 1) * PAGE_SIZE;//从第几条开始查询searchSourceBuilder.from(start);//每页查询多少条数据searchSourceBuilder.size(PAGE_SIZE);/*** 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;}
}

1.4 测试结果

在这里插入图片描述

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

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

相关文章

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进入函数式编程世界的第一步 。 可以将其视为无需类即可创建的函数…

MySQL命令之mysqlhotcopy -- 热备份

文章目录命令介绍命令格式安装 mysqlhotcopy常用选项命令介绍 mysqlhotcopy 只是简单的缓存写入和文件复制的过程&#xff0c;其使用 LOCK TABLES、FLUSH TABLES 和 CP 来进行快速备份,占用资源和备份速度比 mysqldump 快很多很多。特别适合大的数据库&#xff0c;但需要注意的…

trackby_使用trackBy启动流程

trackby仍然沿用我的Corda Services趋势&#xff0c;我还有其他一些技巧可帮助您的CorDapp顺利工作。 这次&#xff0c;我们将重点关注使用trackBy从服务内部启动流以及如果您不小心可能会引发的离散问题。 这应该是一个相对简短的职位&#xff0c;因为我可以依靠以前的职位&a…

SQL查询语句的排序

order by column1 asc, column2 desc -- 按column1升序排序&#xff0c;若column1值相同&#xff0c;则按column1降序排序asc&#xff0c;ascend 的缩写&#xff0c;表示正序&#xff0c;即升序&#xff0c;从小到大&#xff0c;可以省略&#xff0c;默认的 desc&#xff0c;de…

SpringBoot创建项目入门案例

目录结构 一、创建SpringBoot项目 1.创建骨架名称 2.给项目命名 3.配置pom.xml文件 4.MySql的驱动包 5.自动生成的pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xs…