ElasticSearch学习(9)-Java接口查询操作

java 接口操作ElasticSearch进行查询

1.查询所有数据

        SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
        SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
        SearchHits hits =response.getHits();

        for(SearchHit hit : hits){
            System.out.println(hit.getSourceAsString());
        }

执行结果:

{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}

2.分页查询

    SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
    SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).setFrom(0).setSize(3).execute().actionGet();
    for(SearchHit hit : hits){
     System.out.println(hit.getSourceAsString());
     }

执行结果:

{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}

3.排序查询

    SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
     SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).addSort("age", SortOrder.ASC).execute().actionGet();
    for(SearchHit hit : hits){
     System.out.println(hit.getSourceAsString());
     }

执行结果:

{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}

4.数据列的过滤

    SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
    SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).addSort("age", SortOrder.ASC).setFetchSource(new String[]{"name","age"},null).execute().actionGet();
    for(SearchHit hit : hits){
     System.out.println(hit.getSourceAsString());
     }

执行结果:

{"name":"张三222","age":20}
{"name":"李四111","age":20}
{"name":"张三","age":20}
{"name":"张三111","age":20}
{"name":"王五ggg","age":22}
{"name":"张三ggg","age":22}
{"name":"张三ggg","age":22}
{"name":"王五ggg","age":22}

5.简单条件查询

    SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
     SearchResponse response = srb.setQuery(QueryBuilders.matchQuery("name","张三")).setFetchSource(new String[]{"name","age"},null).execute().actionGet();

    for(SearchHit hit : hits){
     System.out.println(hit.getSourceAsString());
     }

执行结果:

{"name":"张三","age":20}
{"name":"张三ggg","age":22}
{"name":"张三222","age":20}
{"name":"张三ggg","age":22}
{"name":"张三111","age":20}

6.查询结果高亮显示

HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<h3><em>");
        highlightBuilder.postTags("</em><h3>");
        highlightBuilder.field("name");
        SearchResponse response = srb.setQuery(QueryBuilders.matchQuery("name","张三")).highlighter(highlightBuilder).addSort("age", SortOrder.ASC).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            System.out.println(hit.getHighlightFields());
        }

执行结果:

{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>222]]}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>]]}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>111]]}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>ggg]]}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>ggg]]}

7.组合多条件查询

场景1:must使用

        QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
        QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
        SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2)).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

执行结果:

{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}

场景2: must与must_not组合使用

QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
        QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "青岛");
     
        SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).mustNot(b2)).execute().actionGet();
        SearchHits hits = response.getHits();

执行结果:

{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}

场景3: should使用

QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
        QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
        QueryBuilder b3 = QueryBuilders.rangeQuery("age").gte(20);

        SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2).should(b3)).addSort("age",SortOrder.DESC).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
         
        }

执行结果:

{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}

场景4:filter使用

QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
        QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
        QueryBuilder b3 = QueryBuilders.rangeQuery("age").gt(20);
     
        SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2).should(b3).filter(b3)).execute().actionGet();
        SearchHits hits = response.getHits();

        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

执行结果:

{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}

猜你喜欢

转载自my.oschina.net/u/2477500/blog/1616445
今日推荐