ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java elasticsearch query

2021-04-16 22:01:35  阅读:173  来源: 互联网

标签:search java client elasticsearch org import query QueryBuilders


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() + "\t\t" + 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());
        }
    }
}

 

标签:search,java,client,elasticsearch,org,import,query,QueryBuilders
来源: https://www.cnblogs.com/zhanchaohan/p/14668876.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有