SpringBoot下使用Jest实现对ElasticSearch的多条件查询

对于一个关系型数据库,各种查询方式组合,可以实现很复杂的搜索从而将结果限定到我们想要的范围之内。那么对于非关系型数据库ElasticSearch又该怎么做?以下操作基于Jest对ElasticSearch进行查询。

 

一、相关

所有相关的基础设置均是基于我另一篇博文所记录而进行,不明白的可以查阅一下。

SpringBoot下使用Jest访问ES数据库以及访问ES集群

额外:

SpringBoot下使用Jest实现对ElasticSearch的文档写入新增

 

二、实现代码

以下代码均在之前所写EsInfoImpl下进行扩充:

@Override
    public JsonObject getEsTestInfo(EsRequestBean esRequestBean){
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        try{
            if (!esRequestBean.getStartTime().isEmpty()){
                queryBuilder.must(QueryBuilders.rangeQuery("startTime").gte(esRequestBean.getStartTime()));
            }
            if (!esRequestBean.getEndTime().isEmpty()){
                queryBuilder.must(QueryBuilders.rangeQuery("endTime").lte(esRequestBean.getEndTime()));
            }
            if (!esRequestBean.getTestCode().isEmpty()){
                queryBuilder.must(QueryBuilders.matchQuery("testCode", esRequestBean.getTestCode()));
            }
            searchSourceBuilder.query(queryBuilder);
            Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(indexName).addType(typeName).build();
            JestResult jestResult = jestClient.execute(search);
            return jestResult.getJsonObject();
        }catch (IOException e){
            logger.error("Get info IOException:" + e);
            return null;
        }catch (Exception e){
            logger.error("Get info Exception:" + e);
            return null;
        }
    }

这里使用的都是must,must的意思就相当于Mysql的and,和的关系。

此外还有mustNot,should等的用法,should就相当于or。

而QueryBuilders中的rangeQuery也是见名知意,范围匹配,gte代表的大于等于,lte是小于等于。而matchQuery就相当于Mysql中的=,只有当字段内容等于指定的内容时才算匹配上。

此外QueryBuilders里还有很多其他的方法,有兴趣的查看一下源码。

 

 

你可能感兴趣的:(SpringBoot,ElasticSearch)