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

相关推荐
武子康42 分钟前
大数据-143 ClickHouse 实战MergeTree 分区/TTL、物化视图、ALTER 与 system.parts 全流程示例
大数据·后端·nosql
Hello.Reader44 分钟前
用 Spark Shell 做交互式数据分析从入门到自包含应用
大数据·数据分析·spark
GeminiJM1 小时前
优化Elasticsearch批量写入性能:从单分片瓶颈到多索引架构
elasticsearch·架构·jenkins
Elasticsearch2 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
elasticsearch
qq_12498707532 小时前
基于hadoop的电商用户行为分析系统(源码+论文+部署+安装)
大数据·hadoop·分布式·毕业设计
电商API_180079052472 小时前
从客户需求到 API 落地:淘宝商品详情批量爬取与接口封装实践
大数据·人工智能·爬虫·数据挖掘
杨超越luckly3 小时前
HTML应用指南:利用POST请求获取全国爱回收门店位置信息
大数据·前端·python·信息可视化·html
呆呆小金人4 小时前
SQL视图:虚拟表的完整指南
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
梦里不知身是客114 小时前
Spark介绍
大数据·分布式·spark
啊吧怪不啊吧4 小时前
SQL之表的查改(下)
大数据·数据库·sql