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

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

环境准备

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

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

高亮查询示例

1. 高亮查询基础

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

Java Code
java 复制代码
@Test
void testHighlightQuery() throws IOException {
    // 1. 准备 SearchRequest
    SearchRequest 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 中获取高亮字段并进行相应的解析。

java 复制代码
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 的高亮功能。

相关推荐
武子康18 小时前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天19 小时前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
Elasticsearch2 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
Elasticsearch3 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库4 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟4 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法