Spring整合Elasticsearch(2)

这篇具有很好参考价值的文章主要介绍了Spring整合Elasticsearch(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        原生查询

        可以查询的范围更精确,当ElasticsearchRepository提供的基本方法无法满足我们所需要的查询可以使用原生的方式查询

 @Test//原生查询
    public void naticeQuery(){
        //创建原生查询构建器对象
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
       //过滤条件
        queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"id","title","price"},new String[0]));
        //搜索条件
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","荣耀"));
        //分页及排序条件      当前页起始数据的下标      每页的大小          排列的顺序
        queryBuilder.withPageable(PageRequest.of(0,2,Sort.by(Sort.Direction.DESC,"price")));
        //高亮显示 TODO
        //聚合      terms()方法指定分组的名称(聚合名称),field方法指定要按照哪一个字段进行分组
        queryBuilder.addAggregation(AggregationBuilders.terms("brandAgg").field("brand"));
        //构建查询条件,并且查询
        AggregatedPage<Producter> result = template.queryForPage(queryBuilder.build(), Producter.class);

        //解析结果
        System.out.println("总条数:"+result.getTotalElements());
        System.out.println("总页数:"+ result.getTotalPages());
        List<Producter> content = result.getContent();
        System.err.print("数据:");
        content.forEach(System.err::print);
        System.out.println("");

        Aggregations aggregations = result.getAggregations();

        Terms terms = aggregations.get("brandAgg");
         terms.getBuckets().forEach(b->{
             System.out.println("品牌:"+b.getKeyAsString());
             System.out.println("count:"+b.getDocCount());
         });

    }

Spring整合Elasticsearch(2),spring,elasticsearch,java

 

        高亮查询

                高亮查询的配置类,固定写法

import com.google.gson.Gson;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.SearchResultMapper;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

//SearchResultMapper 用来自定义查询结果的映射,将结果安装开发者配置,进行重组,然后再返回给客户端
//重写mapResults方法:配置自定义结果映射
public class ProductSearchResultMapper implements SearchResultMapper {
    @Override
    public <T> AggregatedPage<T> mapResults(SearchResponse searchResponse, Class<T> aClass, Pageable pageable) {
        //记录总数
        long totalHits = searchResponse.getHits().getTotalHits();
        //记录列表(泛型) ---构建Aggregate使用
        List<T> list =new ArrayList<>();
        //获取真正的记录
        SearchHits hits = searchResponse.getHits();
        SearchHit[] hs = hits.getHits();
        for (SearchHit h : hs) {

            Map<String, Object> map = h.getSourceAsMap();
            //获取需要高亮显示的字段
            Map<String, HighlightField> highlightFields = h.getHighlightFields();
            for(Map.Entry<String,HighlightField> hf :highlightFields.entrySet()){
                //一组高亮显示的字段
                String key = hf.getKey();
                HighlightField value = hf.getValue();
                //实际需要高亮显示的结果
                Text[] fragments = value.getFragments();
                //高亮的字段在key中
                map.put(key,fragments[0].toString());
            }
            //把Map转化为对象
            Gson gson = new Gson();
            T t = gson.fromJson(gson.toJson(map), aClass);
            list.add(t);
        }
          //返回带分页的结果
        AggregatedPageImpl<T> ts = new AggregatedPageImpl<>(list, pageable, totalHits);
        return ts;
    }
}

        高亮查询

 @Test//高亮查询
    public void naticeQuery1(){
        //创建原生查询构建器对象
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //过滤条件
        queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{"id","title","price"},new String[0]));
        //搜索条件
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","荣耀"));
        //分页及排序条件      当前页起始数据的下标      每页的大小          排列的顺序
        queryBuilder.withPageable(PageRequest.of(0,2,Sort.by(Sort.Direction.DESC,"price")));
        //高亮显示
        //指定需要高亮显示的字段名称
        HighlightBuilder.Field field =new HighlightBuilder.Field("title");
//        field.preTags("<span style='color:yellow'>");//前缀
        field.preTags("<span id='highred'>");//前缀
        field.postTags("</span>");//后缀
        //将指定前缀和后缀的Field对象,绑定到queryBuilder对象上
        queryBuilder.withHighlightFields(field);



        //聚合      terms()方法指定分组的名称(聚合名称),field方法指定要按照哪一个字段进行分组
        queryBuilder.addAggregation(AggregationBuilders.terms("brandAgg").field("brand"));

        //构建查询条件,并且查询
        AggregatedPage<Producter> result = template.queryForPage(queryBuilder.build(), Producter.class,new ProductSearchResultMapper());

        //解析结果
        //分页结果
        System.out.println("总条数:"+result.getTotalElements());
        System.out.println("总页数:"+ result.getTotalPages());
        List<Producter> content = result.getContent();
        System.out.println("数据"+content);

    }

        高亮显示的字段可以将指定的字段添加标签,然后前端写样式来改变展示的样式

Spring整合Elasticsearch(2),spring,elasticsearch,java文章来源地址https://www.toymoban.com/news/detail-595515.html

到了这里,关于Spring整合Elasticsearch(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring整合Elasticsearch(2)

            可以查询的范围更精确,当ElasticsearchRepository提供的基本方法无法满足我们所需要的查询可以使用原生的方式查询                 高亮查询的配置类,固定写法         高亮查询         高亮显示的字段可以将指定的字段添加标签,然后前端写样式来改变展示的样

    2024年02月16日
    浏览(26)
  • Spring Boot 整合Elasticsearch入门

    Spring Data Elasticsearch 是 Spring Data 项目的子项目,提供了 Elasticsearch 与 Spring 的集成。实现了 Spring Data Repository 风格的 Elasticsearch 文档交互风格,让你轻松进行 Elasticsearch 客户端开发。 应粉丝要求特地将 Elasticsearch 整合到 Spring Boot  中去。本来打算整合到 kono 脚手架中,但是转

    2024年04月13日
    浏览(31)
  • spring boot es | spring boot 整合elasticsearch | spring boot整合多数据源es

    目录 Spring Boot与ES版本对应 Maven依赖 配置类 使用方式 @Test中注入方式 @Component中注入方式 查询文档 实体类 通过ElasticsearchRestTemplate查询 通过JPA查询 保存文档 参考链接 项目组件版本: Spring Boot:2.2.13.RELEASE Elasticsearch:6.8.0 JDK:1.8.0_66 Tips: 主要看第3列和第5列,根据ES版本选择

    2023年04月18日
    浏览(43)
  • 使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Elasticsearch官网参考文档:https://www.elastic.co/guide/index.html Elasticsearch官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch https://docs.spring.io/spring-data/elasticsearch/reference/ 添加依赖 修改yml配置文件 【自定义

    2024年04月22日
    浏览(33)
  • Spring Boot整合Elasticsearch超详细教程

    SpringBoot整合Elasticsearch超详细教程 最新高级版 (1)导入springboot整合ES高级别客户端的坐标 (2)使用编程的形式设置连接的ES服务器,并获取客户端对象 (3)Book实体类 (4)连接Dao层 (5)使用客户端对象操作ES 例如创建索引:(这里需要先执行上面的删除索引操作,否则会报错)

    2023年04月09日
    浏览(40)
  • Spring Boot进阶(19):Spring Boot 整合ElasticSearch | 超级详细,建议收藏

            ElasticSearch是一款基于Lucene的开源搜索引擎,具有高效、可扩展、分布式的特点,可用于全文搜索、日志分析、数据挖掘等场景。Spring Boot作为目前最流行的微服务框架之一,也提供了对ElasticSearch的支持。本篇文章将介绍如何在Spring Boot项目中整合ElasticSearch,并展

    2024年02月06日
    浏览(31)
  • 在Spring Boot中整合Elasticsearch并实现高亮搜索

    本文详细介绍了如何在Spring Boot项目中整合Elasticsearch,实现高亮搜索功能。通过添加依赖、配置Spring Boot、为实体类添加注解,以及在Service层实现高亮搜索,读者能够了解如何在实际项目中利用Spring Boot Data Elasticsearch来操作Elasticsearch并实现高亮搜索。验证示例演示了如何使用RESTful API端点来搜索并获取包含高亮字段的用户列表,为读者提供了实际应用的参考。这篇文章将帮助读者轻松掌握Spring Boot与Elasticsearch的整合方法,从而为项目增加强大的搜索功能。

    2024年02月06日
    浏览(31)
  • Springboot --- 整合spring-data-jpa和spring-data-elasticsearch

    SpringBoot: 整合Ldap. SpringBoot: 整合Spring Data JPA. SpringBoot: 整合Elasticsearch. SpringBoot: 整合spring-data-jpa和spring-data-elasticsearch. SpringBoot: 整合thymeleaf. SpringBoot: 注入第三方jar包. SpringBoot: 整合Redis. SpringBoot: 整合slf4j打印日志. SpringBoot: 整合定时任务,自动执行方法. SpringBoot: 配置多数据源

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

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

    2024年02月12日
    浏览(33)
  • 统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合

    原创/朱季谦 最近在做一个将分布式系统的日志数据通过logstash传到kafka的功能,做完之后决定业余搭一个ELK日志分析系统,将logstash采集到的日志传给Elasticsearch。经过一番捣鼓,也把这个过程给走通了,于是写了这篇总结,可按照以下步骤搭建logstash采集spring日志数据并传输

    2024年02月03日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包