zoukankan      html  css  js  c++  java
  • java elasticsearch query

    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import org.elasticsearch.action.get.GetRequestBuilder;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.search.SearchRequestBuilder;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.index.query.DisMaxQueryBuilder;
    import org.elasticsearch.index.query.PrefixQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.RangeQueryBuilder;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.aggregations.AggregationBuilders;
    import org.elasticsearch.search.aggregations.Aggregations;
    import org.elasticsearch.search.aggregations.BucketOrder;
    import org.elasticsearch.search.aggregations.bucket.terms.Terms;
    import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
    import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
    import org.elasticsearch.search.aggregations.metrics.avg.Avg;
    import org.elasticsearch.search.aggregations.metrics.avg.AvgAggregationBuilder;
    import org.elasticsearch.search.sort.SortOrder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    /***
     * 
     * @author zhanchaohan
     *
     */
    public class query {
        private TransportClient client;
         private String EsIndex="etest";
            private String EsType="doc";
    
        @Before
        public void init() throws FileNotFoundException, IOException {
            ElasticConfig ec = new ElasticConfig();
            client = ec.init();
        }
    
        @After
        public void destroy() {
            if (client != null) {
                client.close();
            }
        }
    
        // 单条查询
        @Test
        public void test() {
            GetRequestBuilder getRequestBuilder = client.prepareGet(EsIndex, EsType, "Ps69hGkBfH7K1RnigH-e");
            GetResponse getResponse = getRequestBuilder.execute().actionGet();
            System.out.println(getResponse.getSourceAsString());
        }
    
        @Test
        public void test1() {
            GetRequestBuilder getRequestBuilder = client.prepareGet(EsIndex, EsType, "Ps69hGkBfH7K1RnigH-e");
            GetResponse getResponse = getRequestBuilder.execute().actionGet();
            System.out.println(getResponse.getSourceAsString());
        }
    
        // 全查询
        @Test
        public void test2() {
            // SearchRequestBuilder
            // searchRequestBuilder=client.prepareSearch("index");
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex, "bools");// 多个Index
            SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
            for (SearchHit searchHit : searchResponse.getHits().getHits()) {
                System.out.println(searchHit.getSourceAsString());
            }
        }
    
        /*
         * 使用QueryBuilder termQuery("key", obj) 完全匹配 termsQuery("key", obj1, obj2..)
         * 一次匹配多个值 matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性
         * multiMatchQuery("text", "field1", "field2"..); 匹配多个字段, field有通配符忒行
         * matchAllQuery(); 匹配所有文件
         * 
         * ==,!=
         */
        @Test
        public void test3() {
            // TermQueryBuilder termQuery = QueryBuilders.termQuery("name",
            // "zhangsan");//条件查询
            // MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name",
            // "zhangsan");//匹配查询
            PrefixQueryBuilder prefixQuery = QueryBuilders.prefixQuery("name", "zhangsan");// 前缀查询
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex);
            DisMaxQueryBuilder disMaxQueryBuilder = QueryBuilders.disMaxQuery()
                    .add(QueryBuilders.matchQuery("name", "zhangsan")).add(QueryBuilders.matchQuery("gent", "男"));// 多查询最大排前
    
            SearchResponse searchResponse = searchRequestBuilder
                    // .setQuery(termQuery)
                    // .setQuery(matchQuery)
                    // .setQuery(prefixQuery)
                    .setQuery(disMaxQueryBuilder).execute().actionGet();
            for (SearchHit searchHit : searchResponse.getHits().getHits()) {
                System.out.println(searchHit.getSourceAsString());
            }
        }
    
        /*****
         * ==,!= <,> <=,>= ?-?
         */
        @Test
        public void test4() {
            // BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            // boolQuery.must(QueryBuilders.termQuery("name", "zhangsan0"))
            // .must(QueryBuilders.termQuery("gent",
            // "男"));//多个条件同时满足,&&。must(==),mustNot(!=)
    
            // BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
            // boolQuery2.should(QueryBuilders.termQuery("name", "zhangsan0"))
            // .should(QueryBuilders.termQuery("name", "zhangsan10"));//一个满足则满足,||
    
            // RangeQueryBuilder rangeQueryBuilder =
            // QueryBuilders.rangeQuery("age").gt("5");//>5
            // RangeQueryBuilder rangeQueryBuilder =
            // QueryBuilders.rangeQuery("age").lt("5");//<5
            RangeQueryBuilder rangeQueryBuilder1 = QueryBuilders.rangeQuery("age").from(3).to(6);// 3-6所有
    
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex);
    
            SearchResponse searchResponse = searchRequestBuilder
                    // .setQuery(boolQuery)
                    // .setQuery(boolQuery2)
                    // .setQuery(rangeQueryBuilder)
                    .setQuery(rangeQueryBuilder1).addSort("age", SortOrder.DESC)// 排序
                    .execute().actionGet();
            for (SearchHit searchHit : searchResponse.getHits().getHits()) {
                System.out.println(searchHit.getSourceAsString());
            }
        }
    
        /****
         * 单分组
         * https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_bucket_aggregations.html
         */
        @Test
        public void test5() {
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex);
            TermsAggregationBuilder teamAgg = AggregationBuilders.terms("region_s").field("region.keyword");// 分组
    
            SearchResponse searchResponse = searchRequestBuilder.addAggregation(teamAgg).execute().actionGet();
    
            Aggregations aggregations = searchResponse.getAggregations();
            Terms terms = aggregations.get("region_s");
            for (Bucket bucket : terms.getBuckets()) {
                System.out.println(bucket.getKey() + "		" + bucket.getDocCount());
            }
        }
    
        // 多个分组
        @Test
        public void test6() {
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex);
            TermsAggregationBuilder teamAgg = AggregationBuilders.terms("region_s").field("region.keyword");// 分组
            TermsAggregationBuilder gentAgg = AggregationBuilders.terms("gent_s").field("gent.keyword")
                    .order(BucketOrder.count(true));// 分组,排序
    
            SearchResponse searchResponse = searchRequestBuilder.addAggregation(teamAgg.subAggregation(gentAgg)).execute()
                    .actionGet();
    
            Aggregations aggregations = searchResponse.getAggregations();
            Terms terms = aggregations.get("region_s");
            Terms terms2;
            for (Terms.Bucket bucket : terms.getBuckets()) {
                System.out.println("地区=" + bucket.getKey());
                terms2 = bucket.getAggregations().get("gent_s");
                for (Terms.Bucket bucket2 : terms2.getBuckets()) {
                    System.out.println("性别=" + bucket2.getKey() + ";个数=" + bucket2.getDocCount());
                }
            }
        }
    
        // 取分组最大值,最小值,平均值
        // https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_metrics_aggregations.html
        @Test
        public void test7() {
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsIndex);
            TermsAggregationBuilder teamAgg = AggregationBuilders.terms("region_s").field("region.keyword");// 分组
    //        MaxAggregationBuilder ageAgg = AggregationBuilders.max("age_s").field("age");
    //        MinAggregationBuilder ageAgg=AggregationBuilders.min("age_s").field("age");
            AvgAggregationBuilder avgAgg = AggregationBuilders.avg("age_s").field("age");
            SearchResponse searchResponse = searchRequestBuilder.addAggregation(teamAgg.subAggregation(avgAgg)).execute()
                    .actionGet();
    
            Aggregations aggregations = searchResponse.getAggregations();
            Terms terms = aggregations.get("region_s");
    //        Max max;
    //        Min min;
            Avg avg;
            for (Terms.Bucket bucket : terms.getBuckets()) {
                System.out.println("地区=" + bucket.getKey());
    //            max = bucket.getAggregations().get("age_s");
    //            System.out.println("最大数据名称="+max.getName());
    //            System.out.println("最大数据值="+max.getValue());
    
    //            min=bucket.getAggregations().get("age_s");
    //            System.out.println("最小数据名称="+min.getName());
    //            System.out.println("最小数据值="+min.getValue());
    
                avg = bucket.getAggregations().get("age_s");
                System.out.println("平均数据名称=" + avg.getName());
                System.out.println("平均数据值=" + avg.getValue());
            }
        }
    }
  • 相关阅读:
    使用nodejs运行SAP Fiori应用
    JUnit 注解@Rule的工作原理
    JUnit 注解@SuiteClasses的工作原理
    JUnit 注解@Category的工作原理
    JUnit 注解@RunWith的工作原理
    Eclipse里如果看不到Attach Source按钮应该怎么办
    使用SAP CRM中间件从ERP下载BOM的一些常见问题
    GaussDB(DWS):非侵入式备份及其在NBU上的应用
    华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易
    华为云举办AI经典论文复现活动,打造领先AI开发者学习社区
  • 原文地址:https://www.cnblogs.com/zhanchaohan/p/14668876.html
Copyright © 2011-2022 走看看