0
点赞
收藏
分享

微信扫一扫

es 7.x JavaAPI 文档 条件查询 分页查询 排序查询 字段查询

文章目录

条件查询

条件查询, 只查询age是30的. 主要是使用 QueryBuilders.termQuery 构造条件和值.

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.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");
            // 条件查询 termQuery 只查询age是30的
            request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 30)));
            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();
            }
        }
    }
}

查询结果如下 :

分页查询

使用SearchSourceBuilder的from size 来控制分页.
一页查询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.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().query(QueryBuilders.matchAllQuery());
            builder.from(0);
            builder.size(2);
            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();
            }
        }
    }
}

查询结果如下 :

修改 from size

再次执行, 结果为

排序查询

根据age, 倒序排序查询

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.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

/**
 * @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().query(QueryBuilders.matchAllQuery());
            builder.sort("age", SortOrder.DESC);
            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();
            }
        }
    }
}

字段查询

如果只想查询某个字段, 或者过掉不需要的字段, 可以用字段查询.

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.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().query(QueryBuilders.matchAllQuery());

            String[] includes = {"age"};
            String[] excludes = {};
            builder.fetchSource(includes, excludes);

            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();
            }
        }
    }
}

使用 builder.fetchSource 方法, 传入需要的字段和不需要的字段.
例如上面的例子中, 只查询age字段.
查询结果如下

如果把age放入excludes 数组中, 即修改代码如下

查询结果如下 : 只过滤了 age字段.

举报

相关推荐

0 条评论