elasticsearch整合springboot实现多条件模糊查询

elasticsearch整合springboot实现多条件查询

1.添加依赖

首先添加一个elastisearch整合springboot的依赖

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.2</version>
</dependency>

也可以去官方网站上去看看,官网对于这些功能的介绍也很清楚【官网地址】

多条件查询

首先给大家看看我是怎么写的,再给大家讲一下我自己的理解,同时也欢迎各位大佬的指正。

    //从elaticsearch中根据条件查询
    public R findconditionbyes(ProductconditionReq req) throws IOException {
            SearchRequest request1 = new SearchRequest("titems");
            //构建搜索条件
            SearchSourceBuilder builder = new SearchSourceBuilder();
            //按照颜色查询方法,其中keyword表示不分词匹配,把该词当成一个整体
            //QueryBuilders.matchQuery()表示模糊查询
            //QueryBuilders.termQuery()表示精确查询
            //多条件查询
//            BoolQueryBuilder must = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("item_color.keyword", req.getItem_color()))
//                    .must(QueryBuilders.matchQuery("item_brand.keyword", req.getItem_brand()));

            //条件判断,如果传入的属性为空的话则不执行该查询条件
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            if(null != req.getItem_brand()){
                boolQueryBuilder.must(QueryBuilders.matchQuery("item_brand.keyword", req.getItem_brand()));
            }
            if(null != req.getItem_color()){
                boolQueryBuilder.must(QueryBuilders.matchQuery("item_color.keyword", req.getItem_color()));
            }
            //QueryBuilders.boolQuery().should(QueryBuilders.matchQuery()).should()
            //单条件查询
//            MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("item_color.keyword", req.getItem_color());
            builder.query(boolQueryBuilder);

            builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
            request1.source(builder);
            SearchResponse search = restHighLevelClient.search(request1, RequestOptions.DEFAULT);
            List<Map<String, Object>> list = new ArrayList<>();
            for(SearchHit documentFields : search.getHits().getHits()){
                list.add(documentFields.getSourceAsMap());
            }
            return R.ok(list);

以上就是我自己编写的多条件方法查询,主要过程就是
1.先创建一个SearchRequest搜索请求
2.然后还需要创建一个SearchSourceBuilder搜索条件用于接收所有的查询条件
3.我这里还添加一个判断,如果出入的参数为空的则不添加该查询条件到SearchSourceBuilder中
4.多条件查询的我还需要创建一个BoolQueryBuilder对象

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

5.现在我们就可以将条件依次添加到boolQueryBuilder中了

if(null != req.getItem_brand()){
                boolQueryBuilder.must(QueryBuilders.matchQuery("item_brand.keyword", req.getItem_brand()));
}
if(null != req.getItem_color()){
                boolQueryBuilder.must(QueryBuilders.matchQuery("item_color.keyword", req.getItem_color()));
}

这里的must就是相当于我们mysql中的and关键字,如果你想用的是mysql中共的or关键字的话可以将must换成shoud。
6.我们再将这个boolQueryBuilder对象装入SearchSourceBuilder对象中,然后再将SearchSourceBuilder放入SearchRequest请求中执行。

    builder.query(boolQueryBuilder);
    builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    request1.source(builder);
    SearchResponse search = restHighLevelClient.search(request1, RequestOptions.DEFAULT);
    List<Map<String, Object>> list = new ArrayList<>();
    for(SearchHit documentFields : search.getHits().getHits()){
          list.add(documentFields.getSourceAsMap());
       }
    return R.ok(list);

以上就是我理解的多条件查询的全部过程了。有什么不对的地方欢迎各位的指正。谢谢。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值