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());
            }
        }
    }
  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/zhanchaohan/p/14668876.html
Copyright © 2011-2022 走看看