使用 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 的高亮功能。

相关推荐
小五传输7 小时前
消防总队信创改造实践:国产文件传输服务器解决文件传输难题
大数据·运维·安全
flyinsono7 小时前
连锁宠物医院怎么管?杏聆荟系统实现多店高效协同
大数据·宠物
Sayai7 小时前
Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南
大数据·elasticsearch·docker
智恒百亿7 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能
TDengine (老段)12 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
智购科技自动贩卖机15 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
乐迪信息15 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
Raas10015 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和API网关区别?企业级能力差距一览
大数据·人工智能·数据挖掘·mai gateway·企业级产品
Neighbor_OldY16 小时前
云上安全配置审计与误配置修复实战:从安全组、OSS、RAM到数据库的全栈排查复盘
大数据·运维·安全·云计算
瑞码空间16 小时前
git知识点黄金笔记
笔记·git·elasticsearch