ES练习---各种查询方式

目录

 

一、创建表结构:

二、ES的各种查询

2.1term&terms查询

2.1.1term查询(我试了下province没有办法查询,需到后面加个.keyword)

2.1.2terms查询

2.2match_all&match查询

2.2.1match_all

2.2.2match查询

2.2.3布尔match查询

2.2.4mulitMatch查询

2.3id&ids查询

2.3.1id查询

2.3.2ids查询

2.4prefix查询

2.5fuzzy查询

2.6wildcard查询

2.7range查询

2.8regexp查询

2.9深分页Scroll

3.0delete-by-query

 3.1复合查询

3.1.1bool查询

3.1.2boosting查询

3.2filter查询

3.3高亮查询

3.4聚合查询

3.4.1去重计数查询(cardinality)

3.4.2范围统计

3.4.3统计聚合查询

 3.5地图经纬度查询

 3.5.1地图检索方式

 3.5.2基于RESTFUL实现地图检索

 3.5.3java实现geo_polygon检索


一、创建表结构:

二、ES的各种查询

2.1term&terms查询

2.1.1term查询(我试了下province没有办法查询,需到后面加个.keyword)

package com.qf.test;
 
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.utils.ESClient;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
 
import java.io.IOException;
import java.util.Map;
 
public class Demo4 {
    ObjectMapper mapper=new ObjectMapper();
    RestHighLevelClient client = ESClient.getClient();
 
    String index="sms-logs-index";
    String type="sms-logs-type";
    @Test
    public void termQuery() throws IOException {
        //1.创建request对象
        SearchRequest searchRequest=new SearchRequest(index);
        searchRequest.types(type);
        //2.指定查询条件
        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.from(0);
        builder.size(5);
        builder.query(QueryBuilders.termQuery("province.keyword","北京"));
        searchRequest.source(builder);
        //执行查询
        SearchResponse rsp=client.search(searchRequest, RequestOptions.DEFAULT);
        //输出结果
        for (SearchHit hit:rsp.getHits().getHits()) {
            Map<String,Object> result=hit.getSourceAsMap();
            System.out.println(result);
             
        }
             
    }
}

2.1.2terms查询

POST /sms-logs-index/sms-logs-type/_search
{
  "from": 0,
  "size": 5,
  "query":{
  "terms":{
    "province.keyword":[
      "江苏",
      "北京",
      "南通"
    ]
     
   }
  }
}
@Test
 public void termsQuerry() throws IOException {
     SearchRequest request=new SearchRequest(index);
     request.types(type);
     SearchSourceBuilder builder=new SearchSourceBuilder();
     builder.query(QueryBuilders.termsQuery("province.keyword","南通","江苏"));
     request.source(builder);;
     SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
     //输出结果
     for (SearchHit hit:rsp.getHits().getHits()) {
         Map<String,Object> result=hit.getSourceAsMap();
         System.out.println(result);
     }
}

2.2match_all&match查询

2.2.1match_all

POST /sms-logs-index/sms-logs-type/_search
{
  "query": {
    "match_all": {}
  }
}

注:ES默认查询10条数据。

   @Test
   public void  matchAllQuery() throws IOException {
       SearchRequest request=new SearchRequest(index);
       request.types(type);
        
       SearchSourceBuilder builder=new SearchSourceBuilder();
       builder.query(QueryBuilders.matchAllQuery());
       builder.size(20);//ES默认查询10条数据
           request.source(builder);
 
       SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
 
 
       }
   }

2.2.2match查询

POST /sms-logs-index/sms-logs-type/_search
{
  "query": {
    "match": {
      "smsContent": "恭喜"
    }
  }
}
  @Test
  public void  matchQuery() throws IOException {
      SearchRequest request=new SearchRequest(index);
      request.types(type);
 
      SearchSourceBuilder builder=new SearchSourceBuilder();
      builder.query(QueryBuilders.matchQuery("smsContent","恭喜"));
      builder.size(20);//ES默认查询10条数据
      request.source(builder);
 
      SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
      for (SearchHit hit: rsp.getHits().getHits()) {
          System.out.println(hit.getSourceAsMap());
 
 
      }
  }

2.2.3布尔match查询

public void  booleanMatchQuery() throws IOException {
    SearchRequest request=new SearchRequest(index);
    request.types(type);
 
    SearchSourceBuilder builder=new SearchSourceBuilder();
    builder.query(QueryBuilders.matchQuery("smsContent","恭喜 高级").operator(Operator.AND));
    builder.size(20);//ES默认查询10条数据
    request.source(builder);
 
    SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
    for (SearchHit hit: rsp.getHits().getHits()) {
        System.out.println(hit.getSourceAsMap()); 
 
    }
}

2.2.4mulitMatch查询

   @Test
   public void  mulitMatchQuery() throws IOException {
       SearchRequest request=new SearchRequest(index);
       request.types(type);
 
       SearchSourceBuilder builder=new SearchSourceBuilder();
       builder.query(QueryBuilders.multiMatchQuery("北京","province","smsContent"));
       builder.size(20);//ES默认查询10条数据
       request.source(builder);
 
       SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
       for (SearchHit hit: rsp.getHits().getHits()) {
           System.out.println(hit.getSourceAsMap());
 
 
       }
   }

2.3id&ids查询

2.3.1id查询

 

    @Test
    public  void findByid() throws IOException {
        GetRequest request=new GetRequest(index,type,"1");
        GetResponse rsp=client.get(request, RequestOptions.DEFAULT);
        System.out.println(rsp.getSourceAsMap());

    }

2.3.2ids查询

    @Test
    public void findByids() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.idsQuery().addIds("1","2","3"));
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

2.4prefix查询

    @Test
    public void findByPrefix() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.prefixQuery("corpName","恭喜"));
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

2.5fuzzy查询

 

    @Test
    public void findByfuzzy() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.fuzzyQuery("corpName","恭喜您").prefixLength(2));
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

2.6wildcard查询

    @Test
    public void findByWildcard() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.wildcardQuery("corpName","恭喜*"));
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

2.7range查询

    @Test
    public void findByrange() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.rangeQuery("fee").gte(5).lte(10));
        builder.size(20);//ES默认查询10条数据
        request.source(builder);

        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());


        }
    }

2.8regexp查询

    @Test
    public void findByRegexp() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.regexpQuery("mobile","123[0-9]{8}"));
        builder.size(20);//ES默认查询10条数据
        request.source(builder);

        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit: rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());


        }
    }

2.9深分页Scroll

 

 

 

 

package com.qf.test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.utils.ESClient;
import org.elasticsearch.action.search.*;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.Scroll;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;

import java.io.IOException;

public class Demo7 {
    ObjectMapper mapper=new ObjectMapper();
    RestHighLevelClient client = ESClient.getClient();

    String index="sms-logs-index";
    String type="sms-logs-type";
    @Test
    public  void scrollQuery() throws IOException {
        //1.创建SearchRrequest对象
        SearchRequest request = new SearchRequest(index);
        request.types(type);

        //2.指定scroll信息
        request.scroll(TimeValue.timeValueMinutes(1L));

        //3.指定查询条件
        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.size(4);
        builder.sort("fee", SortOrder.DESC);
        builder.query(QueryBuilders.matchAllQuery());
        request.source(builder);

        //4.获取返回结果scrollId,source
       SearchResponse rsp= client.search(request, RequestOptions.DEFAULT);
       String scrollId=rsp.getScrollId();
       System.out.println("---------首页--------");
        for (SearchHit hit:rsp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
            
        }

        //5.循环/创建SearchScrollRequest
        while(true) {
            SearchScrollRequest searchScrollRequest=new SearchScrollRequest(scrollId);

            //6.指定scrollId生存时间
            searchScrollRequest.scroll(TimeValue.timeValueMinutes(1L));

            //7.执行查询返回的结果
            SearchResponse scrollRsp=client.scroll(searchScrollRequest,RequestOptions.DEFAULT);

            //8.判断是否查询到了数据,输出
          SearchHit[] hits =scrollRsp.getHits().getHits();
            if (hits!=null&& hits.length
            >0){
                System.out.println("----------下一页------------");
                for (SearchHit hit:rsp.getHits().getHits()) {
                    System.out.println(hit.getSourceAsMap());

                }
            }else{
                //9.判断没有查询到的数据-退出循环
                System.out.println("-------------结束-------------");
                break;
            }
        }
        //10.创建ClearScrollRequest
        ClearScrollRequest clearScrollRequest=new ClearScrollRequest();

        //11.指定scrollId
        clearScrollRequest.addScrollId(scrollId);
        //12.删除scrollId
       ClearScrollResponse clearScrollResponse= client.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);
       //13输出结果
        System.out.println("删除scrollId:" +clearScrollResponse.isSucceeded());
    }
}

3.0delete-by-query

    @Test
    public void  deleteByQuery() throws IOException {
        //1.创建deleteByQueryRequest
        DeleteByQueryRequest request=new DeleteByQueryRequest(index);
        request.types(type);
        //2.指定索引的条件(和SearchRequest指定query方式不一样)
        request.setQuery(QueryBuilders.rangeQuery("fee").lt(6));
        //3.执行删除
       BulkByScrollResponse resp =client.deleteByQuery(request, RequestOptions.DEFAULT);
        //4.返回结果
        System.out.println(resp.toString());
    }

 3.1复合查询

3.1.1bool查询

POST /sms-logs-index/sms-logs-type/_search
{
  "query":{
    "bool":{
      "should": [
        {
          "term": {
            "province": {
              "value": "北京"
            }
          }
        },
        {
          "term": {
            "province": {
              "value": "南通"
            }
          }
        }
      ],
       "must_not": [
        {
          "term": {
            "operatorId": {
              "value": "2"
            }
          }
        }
      ],
      "must": [
        {
          "match": {
            "smsContent": "恭喜"
          }
        },
        {
          "match": {
            "smsContent": "黑卡"
          }
        }
      ]
      
    }
  }
}
    @Test
    public  void boolQuery() throws IOException {
        //1.创建SearchRequest
        SearchRequest request=new SearchRequest(index);
        request.types(type);
        //2.查询条件
        SearchSourceBuilder builder=new SearchSourceBuilder();
        BoolQueryBuilder boolQuery=QueryBuilders.boolQuery();
        boolQuery.should(QueryBuilders.termQuery("province","北京"));
        boolQuery.should(QueryBuilders.termQuery("province","南京"));
        boolQuery.mustNot(QueryBuilders.termQuery("OperatorId","2"));
        boolQuery.must(QueryBuilders.matchQuery("smsContent","高级"));
        boolQuery.must(QueryBuilders.matchQuery("smsContent","黑卡"));

        builder.query(boolQuery);
        request.source(builder);
        //3.查询
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        //4.输出结果
        for (SearchHit hit:rsp.getHits().getHits()
             ) {
            System.out.println(hit.getSourceAsMap());
            
        }
    }

3.1.2boosting查询

    @Test
    public  void BoostingQuery() throws IOException {
        //1.创建SearchRequest
        SearchRequest request = new SearchRequest(index);
        request.types(type);
        //2.查询条件
        SearchSourceBuilder builder = new SearchSourceBuilder();
        BoostingQueryBuilder boostingQueryBuilder = QueryBuilders.boostingQuery(
                QueryBuilders.matchQuery("smsContent", "高级"),
                QueryBuilders.matchQuery("smsContent", "黑卡")
        ).negativeBoost(0.5f);
        builder.query(boostingQueryBuilder);
        request.source(builder);

        SearchResponse rsp = client.search(request, RequestOptions.DEFAULT);
        //4.输出结果
        for (SearchHit hit : rsp.getHits().getHits()
        ) {
            System.out.println(hit.getSourceAsMap());

        }
    }

3.2filter查询

 

    @Test
    public void filter() throws IOException {
        //1.创建SearchRequest
        SearchRequest request = new SearchRequest(index);
        request.types(type);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        BoolQueryBuilder boolQuery= QueryBuilders.boolQuery();
        
        boolQuery.filter(QueryBuilders.termQuery("corpName","银行"));
        boolQuery.filter(QueryBuilders.rangeQuery("fee").lte(8));
        
        builder.query(boolQuery);
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        //4.输出结果
        for (SearchHit hit:rsp.getHits().getHits()
        ) {
            System.out.println(hit.getSourceAsMap());

        }

    }

3.3高亮查询

 

 

    @Test
    public  void highLightQuery() throws IOException {
        SearchRequest request=new SearchRequest(index);
        request.types(type);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.query(QueryBuilders.matchQuery("smsContent","黑卡"));
        //指定高亮
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        highlightBuilder.field("smsContent",10)
                .preTags("<font color='red>")
                .postTags("</font>");

        builder.highlighter(highlightBuilder);
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
     for (SearchHit hit:rsp.getHits().getHits()
                                 ) {
         System.out.println(hit.getHighlightFields().get("smsContent"));

        }
    }

3.4聚合查询

3.4.1去重计数查询(cardinality)

    @Test
    public void  cardinality() throws IOException {
        //1.创建SearchRequest
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        //2.指定所用的聚合查询方式
        SearchSourceBuilder builder = new SearchSourceBuilder();
      builder.aggregation( AggregationBuilders.cardinality("agg").field("province"));
      request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        Cardinality agg=rsp.getAggregations().get("agg");
       long value= agg.getValue();
        System.out.println(value);
    }

3.4.2范围统计

 

 

 

 

 

    @Test
    public void range() throws IOException {
        //1.创建SearchRequest
        SearchRequest request = new SearchRequest(index);
        request.types(type);

        //2.指定所用的聚合查询方式
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation(AggregationBuilders.range("agg").field("fee")
                .addUnboundedTo(5)
                .addRange(5, 10)
                .addUnboundedTo(10));
        request.source(builder);
        SearchResponse rsp = client.search(request, RequestOptions.DEFAULT);
        //返回结果
        Range agg = rsp.getAggregations().get("agg");

        for (Range.Bucket bucket : agg.getBuckets()) {
            String key = bucket.getKeyAsString();
            Object from = bucket.getFrom();
            Object to = bucket.getTo();
            long docCount = bucket.getDocCount();


            System.out.println(String.format("key:%s, from:%s, to:%s, docCount:%s", key, from,to,docCount ));
        }
    }

3.4.3统计聚合查询

    //统计聚合查询
    @Test
    public void extendsStates() throws IOException {
        //1.创建SearchRequest
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        //2.指定所用的聚合查询方式
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.aggregation( AggregationBuilders.extendedStats("agg").field("fee"));
        request.source(builder);
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
        ExtendedStats agg=rsp.getAggregations().get("agg");
        double max =agg.getMax();
        double min = agg.getMin();
        System.out.println("fee最大值为:"+max+",最小值为:"+min);

    }

 3.5地图经纬度查询

 

 

 3.5.1地图检索方式

 

 

 3.5.2基于RESTFUL实现地图检索

 

 

 

 3.5.3java实现geo_polygon检索

    @Test
    public void geoPolygon() throws IOException {
        //1.创建SearchRequest
        SearchRequest request=new SearchRequest(index);
        request.types(type);

        //2.指定查询方式
        SearchSourceBuilder builder = new SearchSourceBuilder();
        List<GeoPoint> points=new ArrayList<>();
        points.add(new GeoPoint(39.99878,116.298915));
        points.add(new GeoPoint(39.972576,116.29561));
        points.add(new GeoPoint(39.984739,116.327661));

        builder.query(QueryBuilders.geoPolygonQuery("location",points));
        request.source(builder);
        //3.执行查询
        SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
       //4.输出结果
        for (SearchHit hit:rsp.getHits().getHits()
        ) {
            System.out.println(hit.getSourceAsMap());

        }
    }

 

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值