阅读文本大概需要3分钟。
Elasticsearch查到多种多样
1、matchAllQuery查询所有索引
public static void matchAllQueryTest(RestHighLevelClient client) throws Exception{
    // 1、创建search请求
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("it"); //索引名称
    searchRequest.types("_doc");//类型名称
    // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //搜索全部文档
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    //将请求体加入到请求中
    searchRequest.source(sourceBuilder);
    //3、发送请求
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    SearchHits hits = searchResponse.getHits();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        String source = searchHit.getSourceAsString();
        System.out.println(source);
    }
}测试结果:
{"bookName":"C++","publishDate":"2019-06-30T11:45:00.985Z","sales":"100.00"}
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}2、matchQuery(filedName,value)匹配单个字段,匹配字段名为filedName,值为value的文档
public static void matchQueryTest(RestHighLevelClient client) throws Exception{
    // 1、创建search请求
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("it"); //索引名称
    searchRequest.types("_doc");//类型名称
    // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //搜索全部文档
    sourceBuilder.query(QueryBuilders.matchQuery("bookName", "java"));
    //将请求体加入到请求中
    searchRequest.source(sourceBuilder);
    //3、发送请求
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    SearchHits hits = searchResponse.getHits();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        String source = searchHit.getSourceAsString();
        System.out.println(source);
    }
}测试结果:
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}
3、multiMatchQuery(Object text, String... fieldNames)多个字段匹配某一个值
public static void multiMatchQueryTest(RestHighLevelClient client) throws Exception{
    // 1、创建search请求
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("it"); //索引名称
    searchRequest.types("_doc");//类型名称
    // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //搜索文档
    QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("java",
            "bookName", "sales");
    sourceBuilder.query(queryBuilder);
    //将请求体加入到请求中
    searchRequest.source(sourceBuilder);
    //3、发送请求
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    SearchHits hits = searchResponse.getHits();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        String source = searchHit.getSourceAsString();
        System.out.println(source);
    }
}测试结果
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}4、 wildcardQuery()模糊查询;模糊查询,?匹配单个字符,*匹配多个字符
public static void wildcardQueryTest(RestHighLevelClient client) throws Exception{
        // 1、创建search请求
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("it"); //索引名称
        searchRequest.types("_doc");//类型名称
        // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //搜索文档
        //搜索名字中含有python文档(bookName中只要包含pyton即可)
//        WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("bookName",
//                "*python*");
        WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("reason",
                "*update*");
        sourceBuilder.query(queryBuilder);
        //将请求体加入到请求中
        searchRequest.source(sourceBuilder);
        //3、发送请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit searchHit : searchHits) {
            String source = searchHit.getSourceAsString();
            System.out.println(source);
        }
    }测试结果:
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}5、 BoolQueryBuilder复合查询
public static void boolQueryBuilderTest(RestHighLevelClient client) throws Exception{
    // 1、创建search请求
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("it"); //索引名称
    searchRequest.types("_doc");//类型名称
    // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //搜索文档
    //模糊查询  搜索名字中含有pytond的文档
    WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
            "bookName", "*python*");
    WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
            "reason", "*update*");//搜索interest中含有read的文档
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    //bookName中必须含有python,reason中必须含有update,相当于and
    boolQueryBuilder.must(queryBuilder1);
    boolQueryBuilder.must(queryBuilder2);
    sourceBuilder.query(boolQueryBuilder);
    //将请求体加入到请求中
    searchRequest.source(sourceBuilder);
    //3、发送请求
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    SearchHits hits = searchResponse.getHits();
    SearchHit[] searchHits = hits.getHits();
    for (SearchHit searchHit : searchHits) {
        String source = searchHit.getSourceAsString();
        System.out.println(source);
    }
}测试结果:
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}
public static void boolQueryBuilderTest(RestHighLevelClient client) throws Exception{
        // 1、创建search请求
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("it"); //索引名称
        searchRequest.types("_doc");//类型名称
        // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //搜索文档
        //搜索bookName中含有pytond的文档
         WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
                "bookName", "*python*");
        //搜索reason中含有update的文档
        WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
                "bookName", "*java*");
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //bookName中含有python或者bookName含有java,相当于or
        boolQueryBuilder.should(queryBuilder1);
        boolQueryBuilder.should(queryBuilder2);
        sourceBuilder.query(boolQueryBuilder);
        //将请求体加入到请求中
        searchRequest.source(sourceBuilder);
        //3、发送请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit searchHit : searchHits) {
            String source = searchHit.getSourceAsString();
            System.out.println(source);
        }
    }测试结果:
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}关注我每天进步一点点











