• ElasticSearch ES+java常用查询语句


    elasticsearch用JAVA 查询数据太多,一次性返回数据有限制,

    用车架号分组返回数据的时候,一直误认为.setFrom(0).setSize(100)就是查询返回的数据,这样的语句在单查询的时候没有问题,但是在addAggregation中,或者分组查询等情况下,根本没有效果,必须在addAggregation 返回数据前加上要取多少条记录

    如addAggregation(AggregationBuilders.terms(“vinGroup”).field(“vin.keyword”).size(20)).get();才有效

    下面是查询分组的JAVA代码 ,还有去重复的方法cardinality使用方式,

        //查询过滤范围,注意, elasticsearch里面的字段全部是小写,分组查询按最大值最小值差计算每辆车在时间段里跑的公里数,
    	    //按照总公里数排序,去除重复数据等功能
    	    @Test
    		public void queryFilterMaxMin(){
    	    	QueryBuilder queryrang = QueryBuilders.rangeQuery("createtime").gt("2018-01-01").lt("2018-08-30");//过滤查询( gt大于)  (lt小于)
    	    	 @SuppressWarnings("rawtypes")
    			SortBuilder sortBuilder=SortBuilders.fieldSort("totaldistance");//排序
    	         sortBuilder.order(SortOrder.DESC);
    			//查询总里程不能等于空
    			QueryBuilder query1 = QueryBuilders.boolQuery()
    					.must(QueryBuilders.existsQuery("totaldistance")) //字段为空的判断方式 existsQuery,表示存在值或不存在值,由must和mustNot
    					.filter(queryrang);
    			SearchResponse  search = client.prepareSearch("ims_tsp_completecondition_index")
    					.setQuery(query1).addAggregation(AggregationBuilders.terms("vinGroup").field("vin.keyword")
    							.subAggregation(AggregationBuilders.max("maxtotaldistance").field("totaldistance"))
    							.subAggregation(AggregationBuilders.min("mintotaldistance").field("totaldistance")).size(20))//分组后面加返回数据条数
    					.addSort(sortBuilder)
    					//.setFrom(0).setSize(100)//默认返回10个桶,此参数设置其实是无效,仅仅是分页参数
    					.get();
    			Terms terms = search.getAggregations().get("vinGroup");
    			for(Terms.Bucket tm:terms.getBuckets()){
    				Map map = tm.getAggregations().getAsMap();
    				Max max = (InternalMax)map.get("maxtotaldistance");
    				Min min = (InternalMin)map.get("mintotaldistance");
    				System.out.println("max-min: "+(max.getValue()-min.getValue())+" vin: "+tm.getKey()+" max: "+max.getValue()+" min: "+min.getValue()+" doc_count:"+tm.getDocCount());
    			}
      			//Cardinality 去除重复数据 ,统计总数
      			SearchResponse sr = client.prepareSearch("ims_tsp_completecondition_index")
      					.addAggregation(AggregationBuilders.cardinality("type_count").field("vin.keyword")).execute().actionGet();
      	        Cardinality result = sr.getAggregations().get("type_count");
      	        System.out.println("type_count: "+result.getValue());
    			client.close();
    	    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    下面代码是查询,没有分组,并且按指定字段返回数据,

    查询单个编号的15条数据,给出指定取回的参数字段setFetchSource,有两个参数,第一个是包含要取出的字段,第二个参数是排队哪些字段

    	QueryBuilder query = QueryBuilders.matchQuery("vin","LEFYECG20JHN19938");//LEFYECG20JHN19938  沪BZS601
    			//搜索数据
    			SearchResponse serResponse = client.prepareSearch("ims_tsp_completecondition_index")
    					.setQuery(query)
    					.setFetchSource(new String[]{"platelicenseno","longitude","latitude","totaldistance"}, null)//includes 第一个参数是包括要展示的参数,excludes第二个是要排除的参数
    					.setFrom(0)
    					.setSize(15)
    					.execute().actionGet();
    			SearchHits hits = serResponse.getHits();
    			for(SearchHit hit:hits){
    				Map map = hit.getSourceAsMap();//可以转化成map再对操作数据
    				System.out.println("article get="+hit.getSourceAsString());
    				System.out.println("vin = "+hit.getSourceAsMap().get("vin"));
    			}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    如何看待程序员不写注释
    字节跳动面试笔试总结——算法岗位
    【生成对抗网络 论文泛读】……StarganV1 & StarganV2……
    SpringBoot整合Shiro前后端分离在Https环境下登陆失效的问题
    Codeforces Round #829 Div. 2 D. Factorial Divisibility(结论&数学)
    web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作
    SpringMVC框架中注解的详细介绍
    winodos下使用VS2022编译eclipse-paho.mqtt.c并演示简单使用的 demo
    Qt应用软件【文件篇】json文件读写
    修复Arch Linux和Manjaro Linux无法显示emoji的问题
  • 原文地址:https://blog.csdn.net/m0_67402731/article/details/126358641