当前位置: 首页 > 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 的高亮功能。

http://www.lryc.cn/news/424881.html

相关文章:

  • Java基础入门15:算法、正则表达式、异常
  • SpringBoot响应式编程 WebFlux入门教程
  • LeetCode 383. 赎金信
  • python绘制电路图
  • Vue3 Suspense 和 defineAsyncComponent 结合使用方法
  • GitHub中Codespace怎么使用;LLM模拟初始化;MLP:全连接神经网络的并行执行
  • 【rh】rh项目部署
  • VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
  • 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
  • LLM 量化算法AutoRound 0.3 发布及原理浅析
  • 汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
  • React、AntD,封装动态表单
  • 【Linux基础】Linux中的开发工具(3)--make/makefile和git的使用
  • 过滤了字母、数字、_、$的webshell命令执行技巧
  • python-A+B again
  • C语言—函数递归
  • 结构开发笔记(四):solidworks软件(三):绘制36x36方块摄像头示意体
  • 【机器学习】Caltech-101的基本概念和使用方法以及Caltech-101和ImageNet的联系和区别
  • mysql Ubuntu安装与远程连接配置
  • c语言中比较特殊的输入格式
  • 远程命令行控制SSH
  • 钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介
  • 一次sql请求,返回分页数据和总条数
  • 2.5 pyautogui 实现微信自动回复
  • 观存储历史,论数据未来
  • linux:对目录的操作
  • 详解Redis 高可用的方式 Redis Cluster
  • $clog2(1)=0
  • 开发学习日记1
  • 孙宇晨领航波场TRON:引领数字资产迈向崭新纪元