Elasticsearch5.0 Java Api -- 常用DSL查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch5.0 Java Api -- 常用DSL查询相关的知识,希望对你有一定的参考价值。
测试常用的DSL组合查询功能
1 package com.juyun.test; 2 3 import java.net.InetAddress; 4 5 import org.elasticsearch.action.search.SearchResponse; 6 import org.elasticsearch.client.Client; 7 import org.elasticsearch.common.settings.Settings; 8 import org.elasticsearch.common.transport.InetSocketTransportAddress; 9 import org.elasticsearch.index.query.QueryBuilder; 10 import org.elasticsearch.index.query.QueryBuilders; 11 import org.elasticsearch.search.SearchHit; 12 import org.elasticsearch.search.SearchHits; 13 import org.elasticsearch.search.aggregations.AggregationBuilder; 14 import org.elasticsearch.search.aggregations.AggregationBuilders; 15 import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval; 16 import org.elasticsearch.search.aggregations.metrics.sum.InternalSum; 17 import org.elasticsearch.search.sort.SortBuilder; 18 import org.elasticsearch.search.sort.SortBuilders; 19 import org.elasticsearch.search.sort.SortOrder; 20 import org.elasticsearch.transport.client.PreBuiltTransportClient; 21 import org.joda.time.DateTimeZone; 22 23 public class DslQuery { 24 25 private static Client client; 26 27 // 测试时常用的几种dsl 28 public static void main(String[] args) { 29 30 try { 31 // 设置集群名称 32 Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build(); 33 // 创建client 34 client = new PreBuiltTransportClient(settings) 35 .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.16.0.157"), 9300)); 36 37 long startTime=System.currentTimeMillis(); // 获取开始时间 38 39 commonQuery("newindex","newhttp"); 40 //commonQuery2("newindex","newhttp"); 41 42 long endTime=System.currentTimeMillis(); //获取结束时间 43 System.out.println("程序运行时间: "+(endTime-startTime)+"ms"); 44 45 46 // 关闭client 47 client.close(); 48 49 } catch (Exception e) { 50 e.printStackTrace(); 51 } 52 } 53 54 /** 55 * 以时间戳降序排列并查询出所有数据 56 * @param indexName 57 * @param typeName 58 */ 59 public static void commonQuery(String indexName, String typeName){ 60 61 SortBuilder sortBuilder = SortBuilders.fieldSort("@timestamp") 62 .order(SortOrder.DESC).unmappedType("boolean"); // 定义排序方式 63 QueryBuilder queryBuilder =QueryBuilders.boolQuery() 64 .must(QueryBuilders.queryStringQuery("*").analyzeWildcard(true).defaultField("_all")); // 定义查询方式 65 66 SearchResponse searchResponse = client.prepareSearch(indexName).setTypes(typeName) 67 .setQuery(queryBuilder) 68 .addSort(sortBuilder) 69 .setSize(500) 70 .execute().actionGet(); 71 72 SearchHits hits = searchResponse.getHits(); // 获取搜索结果 73 for (SearchHit searchHit : hits) { // 遍历并以字符串形式打印搜索结果 74 System.out.println(searchHit.getSourceAsString()); 75 } 76 System.out.println("查询到记录数:" + hits.getTotalHits()); 77 } 78 79 80 /** 81 * 集合查询统计总值 82 * @param indexName 83 * @param typeName 84 */ 85 public static void commonQuery2(String indexName, String typeName){ 86 87 SortBuilder sortBuilder = SortBuilders.fieldSort("@timestamp") 88 .order(SortOrder.DESC).unmappedType("boolean"); // 定义排序方式 89 QueryBuilder queryBuilder =QueryBuilders.boolQuery() 90 .must(QueryBuilders.queryStringQuery("*").analyzeWildcard(true).defaultField("_all")); // 定义查询方式 91 92 AggregationBuilder aggBuilder1=AggregationBuilders.dateHistogram("dateagg") // 定义时间间隔直方图 93 .field("@timestamp") 94 .dateHistogramInterval(DateHistogramInterval.minutes(1)) 95 .timeZone(DateTimeZone.forID("+08:00")); 96 97 AggregationBuilder aggBuilder2=AggregationBuilders.sum("sumOfOut").field("http.bytes_out"); // 聚合统计 98 AggregationBuilder aggBuilder3=AggregationBuilders.sum("sumOfIn").field("http.bytes_in"); 99 100 SearchResponse searchResponse = client.prepareSearch(indexName).setTypes(typeName) 101 .setQuery(queryBuilder) 102 .addSort(sortBuilder) 103 .addAggregation(aggBuilder1) 104 .addAggregation(aggBuilder2) 105 .addAggregation(aggBuilder3) 106 .setSize(500) 107 .execute().actionGet(); 108 109 SearchHits hits = searchResponse.getHits(); // 获取搜索结果 110 for (SearchHit searchHit : hits) { // 遍历并以字符串形式打印搜索结果 111 System.out.println(searchHit.getSourceAsString()); 112 } 113 InternalSum sumOfOut = searchResponse.getAggregations().get("sumOfOut"); // 获取出流量总值 114 InternalSum sumOfIn = searchResponse.getAggregations().get("sumOfIn"); // 获取进流量总值 115 116 System.out.println("查询到记录数:" + hits.getTotalHits()); 117 System.out.println("outbyte的总值是:"+sumOfOut.getValue()); 118 System.out.println("inbyte的总值是:"+sumOfIn.getValue()); 119 } 120 }
以上是关于Elasticsearch5.0 Java Api -- 常用DSL查询的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch5.0 Java Api -- 聚合查询
Elasticsearch5.0 Java Api -- 检索索引
Elasticsearch5.0 Java Api -- 更新索引
Elasticsearch5.0 Java Api -- 常用DSL查询