ES简单教程(四)使用ElasticsearchRestTemplate多条件分页查询(复杂版)

这篇具有很好参考价值的文章主要介绍了ES简单教程(四)使用ElasticsearchRestTemplate多条件分页查询(复杂版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TIPS:本文实现类似数据库后台管理系统的多条件分页查询。文章来源地址https://www.toymoban.com/news/detail-509677.html

package com.test.impl;

/**
 * TestIndex实现类impl,实现多条件分页查询
 */
@Service
public class TestIndexServiceImpl implements TestIndexService {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestIndexServiceImpl.class);

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

	//TestIndexListQuery query为条件查询对象,封装了一些需要查询的字段
    @Override
    public Page<TestIndex> list(TestIndexListQuery query) {
        Integer pageNum = query.getPageNum();
        Integer pageSize = query.getPageSize();

        //组装查询条件 must类似and匹配到所有字段后进行组合查询
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        if(StringUtils.isNotBlank(query.getItem_id())){
            queryBuilder.must(termQuery("item_id", query.getItem_id()));
        }
        if(StringUtils.isNotBlank(query.getItem_name())){
            //类似like的操作,针对不能分词的字段进行模糊查询,数据量大不推荐,性能不友好
            queryBuilder.must(wildcardQuery("item_name", "*"+query.getItem_name()+"*"));
        }
        if(StringUtils.isNotBlank(query.getArea_code())){
            queryBuilder.must(termQuery("area_code", query.getArea_code()));
        }
        if(StringUtils.isNotBlank(query.getUser_name())){
            queryBuilder.must(QueryBuilders.wildcardQuery("user_name", "*"+query.getUser_name()+"*"));
        }
        if(StringUtils.isNotBlank(query.getPhone())){
            queryBuilder.must(termQuery("phone", query.getPhone()));
        }
        if (Objects.nonNull(query.getStartTime())) {
            queryBuilder.must(QueryBuilders.rangeQuery("createdatetime").gte(query.getStartTime()));
        }
        if (Objects.nonNull(query.getEndTime())) {
            queryBuilder.must(QueryBuilders.rangeQuery("createdatetime").lte(query.getEndTime()));
        }

        NativeSearchQuery build = new NativeSearchQueryBuilder()
                .withQuery(queryBuilder)
                .withPageable(PageRequest.of(pageNum, pageSize))
                .withHighlightFields(//字段高亮设值
                        new HighlightBuilder.Field("seek_title").preTags("<em>").postTags("</em>")
//                        new HighlightBuilder.Field("seek_title").preTags("<span style='color:blue'>").postTags("</span>")
                )
                .build();
        LOGGER.info("列表查询的语句:{}", build.getQuery().toString());

        SearchHits<Seek> search = elasticsearchRestTemplate.search(build, Seek.class);
        SearchPage<Seek> page = SearchHitSupport.searchPageFor(search, build.getPageable());

        //高亮结果集,也可以用page.getHighlightFields()获取
        List<Seek> list = new ArrayList<>();
        for (SearchHit<Seek> each : page) {
            Seek vo = each.getContent();
            //高亮设值
            if (each.getHighlightFields().get("seek_title") != null) {
                vo.setSeek_title(each.getHighlightFields().get("seek_title").get(0));
            }
            list.add(vo);
        }
        //组装分页对象
        Page<Seek> pageInfo = new PageImpl<>(list, build.getPageable(), search.getTotalHits());
//        PageImpl<Seek> pageInfo = new PageImpl<Seek>(list, build.getPageable(), search.getTotalHits());
        return pageInfo;
    }

}

到了这里,关于ES简单教程(四)使用ElasticsearchRestTemplate多条件分页查询(复杂版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • java 整合ES实现文档增删改查(多条件分页查询)

    本文采用ES版本为8.7.1 由于只存储文章,仅用固定索引即可,索引用kibanna直接生成,省略索引部分的增删查步骤 抓取返回信息是因为版本问题无法解析ES返回的正确信息,实际操作成功但是会报错 我这边只需要单索引操作,有需求的可以让前端传过来

    2024年02月13日
    浏览(42)
  • Elasticsearch 7.X SpringBoot 使用 ElasticsearchRestTemplate 操作 ES

    前面学习了es rest接口对es进行操作的方式,并且还学习了es的分片及扩容,有讲解了几种常见的分词器,喜欢的小伙伴可以看下本专栏的其他文章,本篇主要将 在 SpringBoot 中使用 ElasticsearchRestTemplate 对ES进行操作。 对于SpringBoot对ES的操作早在以前我就写过一篇文章,但那时基

    2023年04月09日
    浏览(42)
  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(70)
  • SpringDataJpa的使用 -- 条件查询、排序查询、分页查询

    本文以 Article.java 为数据存放类,操作接口为 ArticleRepository.java @Data lombok 的注解,用来生成 Getter、Setter、toString、hashCode 方法,当添加该注解的同时在添加 相应方法(如 toString())时,添加的方法不会被覆盖。 @NoArgsConstructor lombok 的注解,用来生成 无参构造函数。 @AllArgsCo

    2024年02月01日
    浏览(78)
  • 【ES常用查询】基于ElasticsearchRestTemplate及NativeSearchQuery的查询

    包含当前es所有的查询, 需要什么代码直接照搬,改个参数就行! 用的好请务必给我点赞!!!感谢爱你们!!! 为啥写这篇文章呢: 大概是因为目前公司用的api跟以前的不太一样, 以前我们是基于高标准客户端直接做的, 但是目前这边同事是基于ElasticsearchRestTemplate跟

    2024年02月03日
    浏览(42)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(85)
  • ES 使用 Bucket Sort 对聚合结果分页

    在 Elasticsearch 中,Bucket Sort 是一种聚合操作,用于对桶(bucket)进行排序。它可以根据指定的字段对聚合结果中的桶进行排序,以便按照特定的顺序呈现数据。 Bucket Sort 和 Top Hits 有相似之处,他们之间的区别是:Bucket 是对聚合分桶的排序和分页,而 Top Hits 是对分桶聚合中每

    2024年02月07日
    浏览(50)
  • es 使用 cardinality + collapse做分页去重查询

    1.首先我们来介绍一下cardinality的用法 cardinality 即去重计算,类似sql中 count(distinct),先去重再求和,计算指定field值的种类数。 可以看到,aggregations聚合下,返回了按名字查询去重后的结果数,但是只有去重后的条数,没有具体的数据。 2.接下来我们再看一下collapse的用法

    2024年02月01日
    浏览(45)
  • Java中使用es条件构造器BoolQueryBuilder

    由于es在java中查询没法像mybatis那样方便,而且es的构造器使用也比较繁琐,理解不是很方便,所以写一篇文章来记录es构造器BoolQueryBuilder查询时各种条件的构造的正确姿势。 1.构造准备 2.条件构造 must可用filter代替,查询效率会更高,因为must会对结果进行_score评估 3.构造完成

    2024年02月11日
    浏览(56)
  • 使用ES同一个字段,不同条件or查询

    需求: type 字段是使用逗号分隔的字符串,要求多个 值只要与此字段 模糊匹配,即可成功 布尔查询(Bool Query) 布尔查询是一种联合查询,可以对多个查询条件进行组合,布尔查询有四个子查询: 有时我们在查询es时,希望能够一次返回符合多个查询条件的结果,如

    2024年02月11日
    浏览(95)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包