当前位置: 首页 > news >正文

使用 RestHighLevelClient 进行 Elasticsearch 高亮查询及解析

在搜索引擎中,高亮显示查询关键字是一个提升用户体验的功能,它可以帮助用户更快地定位到相关信息。Elasticsearch 支持在搜索结果中对匹配的文本进行高亮显示。本文将介绍如何在 Java 应用程序中使用 Elasticsearch 的 RestHighLevelClient 执行高亮查询,以及如何解析高亮结果。

环境准备

确保你的项目中已经添加了 Elasticsearch 客户端库的依赖。如果使用 Maven,可以在 pom.xml 文件中添加如下依赖:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level</artifactId><version>7.10.0</version> <!-- 使用适合的版本号 -->
</dependency>

高亮查询示例

1. 高亮查询基础

在 Elasticsearch 中,可以通过 HighlightBuilder 来构建高亮查询。

Java Code
@Test
void testHighlightQuery() throws IOException {// 1. 准备 SearchRequestSearchRequest request = new SearchRequest("hotel"); // 指定索引名称// 2. 准备 DSL 查询request.source().query(QueryBuilders.matchQuery("name", "如家")) // 查询条件.highlighter(new HighlightBuilder().field("name") // 高亮字段.requireFieldMatch(false) // 是否需要与查询字段匹配);// 3. 发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4. 解析响应handleHighlightResponse(response);
}

2. 高亮结果解析

高亮的结果处理涉及到从 SearchHit 中获取高亮字段并进行相应的解析。

private void handleHighlightResponse(SearchResponse response) throws IOException {SearchHits searchHits = response.getHits();System.out.println("共搜索到 " + searchHits.getTotalHits().value + " 条数据");for (SearchHit hit : searchHits.getHits()) {// 获取原始文档信息HotelDoc hotelDoc = JSON.parseObject(hit.getSourceAsString(), HotelDoc.class);// 处理高亮Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)) {HighlightField highlightField = highlightFields.get("name");if (highlightField != null) {// 取出高亮结果数组中的第一个片段String highlightedName = highlightField.getFragments()[0].string();hotelDoc.setName(highlightedName);}}// 打印结果System.out.println(hotelDoc);}
}

结语

Elasticsearch 的高亮功能使得搜索结果中的关键字能够以视觉上突出的方式展示给用户,这在提升搜索结果的可读性方面非常有帮助。通过 RestHighLevelClient,我们可以方便地在 Java 应用程序中实现这一功能。本文提供的示例代码展示了如何使用 Java 的 RestHighLevelClient 进行高亮查询,并给出了高亮结果的解析方法,希望能够帮助开发者更好地利用 Elasticsearch 的高亮功能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Erupt 项目搭建
  • Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互
  • 51单片机-动态数码管显示
  • MyBatis:Maven,Git,TortoiseGit,Gradle
  • Linux系統中修改IP地址詳細教程
  • SQLite库笔记:日期和时间函数
  • docker构建时是否使用了代理测试
  • VMware Fusion 11.5安装
  • SpringBoot 框架学习笔记(八):异常处理 和 Servlet、Filter、Listener三大组件注入spring
  • 密码学基础:彩虹表技术
  • 实战项目:贪吃蛇游戏的实现(上)
  • 创建vscode debug环境
  • docker、防火墙关闭仍然无法访问、防火墙命令
  • 网络通信(基于UDP协议的Socket编程模型)
  • 全球海事航行通告解析辅助决策系统
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • es6--symbol
  • extjs4学习之配置
  • golang 发送GET和POST示例
  • js
  • Js基础知识(一) - 变量
  • js如何打印object对象
  • Objective-C 中关联引用的概念
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redash本地开发环境搭建
  • socket.io+express实现聊天室的思考(三)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • ucore操作系统实验笔记 - 重新理解中断
  • vue中实现单选
  • 爱情 北京女病人
  • 从零开始学习部署
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端临床手札——文件上传
  • 前端之React实战:创建跨平台的项目架构
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 优化 Vue 项目编译文件大小
  • 阿里云服务器购买完整流程
  • ​zookeeper集群配置与启动
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # Java NIO(一)FileChannel
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #APPINVENTOR学习记录
  • (C++)八皇后问题
  • (C语言)逆序输出字符串
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (二)正点原子I.MX6ULL u-boot移植
  • (六)vue-router+UI组件库
  • (十八)三元表达式和列表解析
  • (十五)使用Nexus创建Maven私服
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)事件系统
  • (转)iOS字体
  • (转)Linux下编译安装log4cxx
  • (转)大型网站的系统架构