ES 高级实战(四)查询 ES 数据

简介: ES 高级实战(四)查询 ES 数据

四、实战:查询 ES 数据

我们已经将数据同步到了 ES 中,现在就是前端怎么去查询 ES 数据中,这里我们还是使用 Postman 来模拟前端查询请求。

4.1 定义请求参数

请求参数我定义了三个:

  • keyword:用来匹配问题或者答案。
  • id:用来匹配题目 id。
  • pageNum:用来分页查询数据。

这里我将这三个参数定义为一个类:

@Data
public class SearchParam {
    private String keyword; // 全文匹配的关键字
    private String id; // 题目 id
    private Integer pageNum; // 查询第几页数据
}

4.2 定义返回参数

返回的 response 我也定义了四个字段:

  • questionList:查询到的题目列表。
  • pageNum:第几页数据。
  • total:查询到的总条数。
  • totalPages:总页数。

定义的类如下所示:

@Data
public class SearchQuestionResponse {
    private List<QuestionEsModel> questionList; // 题目列表
    private Integer pageNum; // 查询第几页数据
    private Long total; // 总条数
    private Integer totalPages; // 总页数
}

4.3 组装 ES 查询参数

调用 ES 的查询 API 时,需要构建查询参数。

组装查询参数的核心代码如下所示:

组装查询参数

  • 第一步:创建检索请求。
  • 第二步:设置哪些字段需要模糊匹配。这里有三个字段:title,answer,typeName。
  • 第三步:设置如何分页。这里分页大小是 5 个。
  • 第四步:调用查询 api。

4.4 格式化 ES 返回结果

ES 返回的数据是 ES 定义的格式,真正的数据被嵌套在 ES 的 response 中,所以需要格式化返回的数据。

核心代码如下图所示:

格式化 ES 返回结果

  • 第一步:获取查到的数据。
  • 第二步:获取真正命中的结果。
  • 第三步:格式化返回的数据。
  • 第四步:组装分页参数。

4.5 测试 ES 查询

4.5.1 实验一:测试 title 匹配

我们现在想要验证 title 字段是否能匹配到,传的请求参数 keyword = 111,匹配到了 title = 111 的数据,且只有一条。页码 pageNum 我传的 1,表示返回第一页数据。如下图所示:

测试匹配 title

4.5.2 实验二:测试 answer 匹配

我们现在想要验证 answer 字段是否能匹配到,传的请求参数 keyword = 测试答案,匹配到了 title = 测试答案的数据,且只有一条,说明查询成功。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcvaoFV5-1652022487598)(http://cdn.jayh.club/blog/20210407/aJL2IgNtXN7o.png?imageslim)]

4.5.2 实验三:测试 id 匹配

我们现在想要匹配题目 id 的话,需要传请求参数 id,而且 id 是精确匹配。另外 id 和 keyword 是取并集,所以不能传 keyword 字段。

请求参数 id = 5,返回结果也是 id =5 的数据,说明查询成功。如下图所示:

测试 id 匹配

五、总结

本文通过我的开源项目 passjava 来讲解 ES 的整合,ES 的 API 使用以及测试。非常详细地讲解了每一步该如何做,相信通过阅读本篇后,再加上自己的实践,一定能掌握前后端该如何使用 ES 来达到高效搜索的目的。

当然,ES API 还有很多功能未在本文实践,有兴趣的同学可以到 ES 官网进行查阅和学习。

再次强调:本文的代码都是辛苦调试出来的,请不要忘记点赞和转发哦~

相关文章
|
Windows
Electron窗口白屏解决
Electron白屏问题主要出现在两方面: 1、electron未加载完毕html,electron自身产生的白色背景; 2、electron加载html,html处于加载渲染过程中产生的短暂白屏;
2732 0
|
Docker 容器
解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
3280 0
解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
|
4月前
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
SQL 关系型数据库 MySQL
MySQL 8.0:filesort 性能退化的问题分析
用户将 RDS MySQL 实例从 5.6 升级到 8.0 后,发现相同 SQL 的执行时间增长了十几倍。本文就该问题逐步展开排查,并最终定位根因。
|
架构师 Java 测试技术
一文搞透高并发指标(QPS、TPS、吞吐量等)
详解高并发场景下的QPS、TPS、RT及吞吐量等关键性能指标,帮助理解系统性能评估的核心概念。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文搞透高并发指标(QPS、TPS、吞吐量等)
|
XML 小程序 前端开发
小程序制作教程
小程序制作教程
979 3
小程序制作教程
|
存储 安全 编译器
深入理解C语言中的枚举
深入理解C语言中的枚举
|
JavaScript Windows
electron程序运行在某些 windows 上白屏
electron程序运行在某些 windows 上白屏
|
人工智能 监控 数据挖掘
数字化转型中的项目管理架构:创新与挑战
【8月更文第7天】简述数字化转型对企业的重要性及其对项目管理带来的影响。 - 概述数字化转型下项目管理架构所面临的机遇与挑战。
752 0
|
SQL 数据可视化 前端开发
简单好用的ElasticSearch可视化工具:es-client和Head
使用 ElasticSearch(简称 es) 的过程中,经常有一些临时查询(如 排查问题、验证效果),一个趁手的可视化工具 可以提高工作效率。个人倾向于 免费(最好开源)、易于安装(如 浏览器插件),`es-client` 就是 比较简单好用的一个,尤其是 查询
12780 0