【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示

这篇具有很好参考价值的文章主要介绍了【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看代码:
controller:

//根据关键字搜索
@RequestMapping(value = "/searchWC", produces = "application/json; charset=utf-8")
public Resp searchWC(Integer page, Integer limit, String kw){
    return searchService.searchWC(page, limit, kw);
}
//ft http://localhost:11011/search-api/search/searchWC?page=1&limit=5&kw=白色

serviceImpl:

   @Override
    public Resp searchWC(Integer page, Integer limit, String kw) {
        //todo: 搜索ES中的数据,保存到data中。
        //准备需要用到的变量:搜索请求、存放最终响应数据的Map、搜索源构造器、
        //  高亮构造器、搜索结果、存放搜索结果的List。
        SearchRequest request = new SearchRequest("item");
        Map searchResultMap = new HashMap<>();
        SearchSourceBuilder builder = new SearchSourceBuilder();
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        SearchResponse searchResponse = null;
        List list = new ArrayList<>();

        //添加搜索条件:关键字模糊查询、分页、高亮
        if(kw != null && !"".equals(kw)){
            //★★注意这里是matchQuery,不是fuzzyQuery,模糊搜索有空再学★★
            builder.query(QueryBuilders.matchQuery("title", kw).maxExpansions(1));
        }
        builder.from((page - 1) * limit);
        builder.size(limit);
        highlightBuilder.preTags("<em style='color: red'>");
        highlightBuilder.postTags("</em>");
        highlightBuilder.field("title");
        builder.highlighter(highlightBuilder);
        
        //设置查询条件,查询
        request.source(builder);
        try {
            searchResponse = highLevelClient.search(request, RequestOptions.DEFAULT);
            long hitsTotalValue = searchResponse.getHits().getTotalHits().value;//总条数
//            System.out.println("hitsTotalValue: " + hitsTotalValue);//ft
            searchResultMap.put("total", hitsTotalValue);
            //页数(ceil后结果类型是double)
            searchResultMap.put("pages", (long) Math.ceil(hitsTotalValue * 1.0 / limit));
            searchResultMap.put("currPage", page);
            
            //用高亮数据替换原数据
            SearchHits hits = searchResponse.getHits();
            for(SearchHit hit: hits){
                //数据,不包含高亮数据
                Map<String, Object> sourceMap = hit.getSourceAsMap();
                //单独取出高亮数据
                Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                HighlightField highlightTitle = highlightFields.get("title");//注意是数组
                
                if(highlightTitle != null){
                    Text[] fragments = highlightTitle.getFragments();
                    if(fragments != null && fragments.length > 0){
                        //替换(fargment[0]是Text类型的)
                        sourceMap.replace("title", fragments[0].toString());
                    }
                }
                list.add(sourceMap);//循环将数据添加入列表
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        searchResultMap.put("data", list);//设置最终结果数据域

        return Resp.ok("搜索成功", searchResultMap);
    }

小结
1、添加ES场景启动器

<!-- 添加ES的场景启动器的依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2、yaml配置ES

spring:
  application:
    name: buy-search
  elasticsearch:
    rest:
      uris: 
        - 192.168.66.132:9200

3、准备需要用到的变量
【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示
注:还有一个注入的RestHighLevelClient

结构如下:
【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示
具体调用的方法以及设置页码等参看代码。

加断点查看对应searchResponse数据结构:
【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示
HighlightFields的数据结构:
【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示
对照kinaba结果:

【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示
3、根据结构图,完成相关构造器的配置,调用对应方法,完成查询,处理结果,响应。

最终响应结果:
【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示文章来源地址https://www.toymoban.com/news/detail-508337.html

到了这里,关于【Elasticsearch】SpringBoot整合ES实现搜索功能 | 高亮显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮

    准备一个空的SpringBoot项目 写入依赖 注意你的SpringBoot和你的es版本,一定要对应,如果不知道的可以查看这篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安装es请看这篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    浏览(51)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查询 match

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 数据准备 官方测试数据下载地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,数据量很大,我们自己构造数据吧。 2. m

    2023年04月08日
    浏览(51)
  • 搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得

    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,

    2024年02月04日
    浏览(69)
  • ElasticSearch系列 - SpringBoot整合ES:指定搜索结果返回的字段_source

    Elasticsearch的搜索结果可以通过以下参数进行控制: from:指定搜索结果的起始位置,默认为0。 size:指定返回的文档数量,默认为10。 sort:指定搜索结果的排序方式,可以按照字段升序或降序排列。 query:指定搜索的查询条件,可以使用各种查询语句进行搜索。 filter:指定

    2024年02月04日
    浏览(49)
  • 知识点13--spring boot整合elasticsearch以及ES高亮

    本章知识点沿用知识点12的项目,介绍如何使用spring boot整合ES,没有ES的去我主页 各类型大数据集群搭建文档--大数据原生集群本地测试环境搭建三 中可以看到ES如何搭建 不管你有没有ES,最好是没有,因为一定要知道一点,一定要去官网查一下你当前用的spring boot data es的版

    2024年02月12日
    浏览(50)
  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(55)
  • springboot——集成elasticsearch进行搜索并高亮关键词

    目录 1.elasticsearch概述 3.springboot集成elasticsearch 4.实现搜索并高亮 (1)是什么: Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。 Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但Lucene 只是一个基于java下的库,需要使用 Java 并要

    2023年04月20日
    浏览(105)
  • ElasticSearch(五)SpringBoot+ES+Jsoup实现JD(京东)搜索

    项目效果 ​ 利用Jsoup爬虫爬取JD商城的商品信息,并将商品信息存储在ElasticSearch中,同时利用请求进行全文检索,同时完成高亮显示等功能。 Jsoup :jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于

    2023年04月26日
    浏览(38)
  • springboot集成elasticsearch,实现搜索提示补全功能

    注:在此之前需要下载elasticsearch以及拼音分词器。可以查看这篇文章,免费下载,下载完直接解压就行。 https://download.csdn.net/download/weixin_47874230/86514890 spring-data-elasticsearch版本需要与springboot版本对应,此处使用springboot版本为2.2.13.RELEASE

    2024年02月09日
    浏览(40)
  • SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能_尚上优选整合es+mq实现商品上下架(1)

    文章目录 前言 1、前置条件 2、搭建service-search模块 3、开发功能接口 3.1 添加远程调用方法 3.2、创建远程调用模块 3.3、开发service-search 模块接口 4、RabbitMQ 5、完善SKU管理商品上下架 5.1、商品服务 5.2、es服务 6、最终测试 总结 最终实现效果:针对SKU的上下架 上架效果: 1、后

    2024年04月17日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包