前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11、使用Java High Level REST Client操作elasticsearch

11、使用Java High Level REST Client操作elasticsearch

作者头像
BUG弄潮儿
发布2020-06-12 16:21:05
5700
发布2020-06-12 16:21:05
举报
文章被收录于专栏:JAVA乐园JAVA乐园

阅读文本大概需要3分钟。

Elasticsearch查到多种多样

1、matchAllQuery查询所有索引

代码语言:javascript
复制
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);

    }

}

测试结果:

代码语言:javascript
复制
{"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的文档

代码语言:javascript
复制
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);

    }

}

测试结果:

代码语言:javascript
复制
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}

3、multiMatchQuery(Object text, String... fieldNames)多个字段匹配某一个值

代码语言:javascript
复制
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);

    }

}

测试结果

代码语言:javascript
复制
{"bookName":"java","publishDate":"2013-01-30","sales":"100.00"}

4、 wildcardQuery()模糊查询;模糊查询,?匹配单个字符,*匹配多个字符

代码语言:javascript
复制
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);

        }

    }

测试结果:

代码语言:javascript
复制
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}

5、 BoolQueryBuilder复合查询

代码语言:javascript
复制
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);

    }

}

测试结果:

代码语言:javascript
复制
{"bookName":"python","publishDate":"2019-06-30T11:45:00.735Z","sales":"100.00","reason":"dailyupdate","updated":"2019-07-13T02:51:27.915Z"}
代码语言:javascript
复制
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);

        }

    }

测试结果:

代码语言:javascript
复制
{"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"}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档