您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

es 7.x JavaAPI 文档 组合条件查询 范围查询

java持续实践 发布时间:2022-01-16 18:09:12 ,浏览量:2

文章目录
      • 组合条件查询
      • 范围查询

组合条件查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

/**
 * @author:
 * 创建时间:2022/1/11 21:05
 */
public class ESTest_Doc_Query {

    public static void main(String[] args) throws Exception {
        RestHighLevelClient esClient = null;
        // 创建ES客户端
        try {
            esClient = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
            SearchRequest request = new SearchRequest();
            request.indices("user");

            // 组合条件查询
            SearchSourceBuilder builder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

            boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
            boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));

            builder.query(boolQueryBuilder);
            request.source(builder);
            SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
            // 查询命中的信息
            SearchHits hits = response.getHits();

            System.out.println(hits.getTotalHits());
            System.out.println(response.getTook());
            for (SearchHit hit : hits) {
                System.out.println(hit.getSourceAsString());
            }
        } finally {
            if (esClient != null) {
                // 关闭ES客户端
                esClient.close();
            }
        }
    }
}

使用BoolQueryBuilder , 查询必须sex是男, 并且 age是30的数据. 结果如下:

{“name”:“zhangsan”,“age”:30,“sex”:“男”}

修改查询条件, 查询age是30 , sex不是男性的数据 修改的代码如下:

boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));

查询性别不是男性, 年龄是30 或40的数据, 使用should

 boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));
            boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
            boolQueryBuilder.should(QueryBuilders.matchQuery("age", 40));

查询结果如下:

{"name":"lisi","age":30,"sex":"女"}
{"name":"wangwu1","age":40,"sex":"女"}
范围查询

查询年龄 大于等于30 , 小于等于 50的数据

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

/**
 * @author:
 * 创建时间:2022/1/11 21:05
 */
public class ESTest_Doc_Query {

    public static void main(String[] args) throws Exception {
        RestHighLevelClient esClient = null;
        // 创建ES客户端
        try {
            esClient = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
            SearchRequest request = new SearchRequest();
            request.indices("user");
  
            // 范围查询
            SearchSourceBuilder builder = new SearchSourceBuilder();
            RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
            rangeQuery.gte(30);
            rangeQuery.lte(50);

            builder.query(rangeQuery);
            request.source(builder);
            SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
            // 查询命中的信息
            SearchHits hits = response.getHits();

            System.out.println(hits.getTotalHits());
            System.out.println(response.getTook());
            for (SearchHit hit : hits) {
                System.out.println(hit.getSourceAsString());
            }
        } finally {
            if (esClient != null) {
                // 关闭ES客户端
                esClient.close();
            }
        }
    }
}

结果打印如下 :

{“name”:“zhangsan”,“age”:30,“sex”:“男”} {“name”:“lisi”,“age”:30,“sex”:“女”} {“name”:“wangwu”,“age”:40,“sex”:“男”} {“name”:“wangwu1”,“age”:40,“sex”:“女”} {“name”:“wangwu2”,“age”:50,“sex”:“男”} {“name”:“wangwu3”,“age”:50,“sex”:“男”}

主要使用RangeQueryBuilder 来进行范围查询.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0374s