es java api

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;

import javax.annotation.Resource;

import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.junit.Test;

import com.tgram.jcjw.core.model.building.Building;
import com.tgram.jcjw.search.util.ESUtil;

/**
 * <p>Description: todo</p>
 * <p>Copyright: Copyright (c) 2017</p>
 * <p>Company: 7qb</p>
 *
 * @author huangleibin
 * @version 1.0 2017/8/3
 */
public class ESTest extends BaseTest
{
    
    @Resource(name = "esTransportClient")
    private TransportClient client;
    
    @Test
    public void test()
    {
//        SearchResponse response = client.prepareSearch("zs_building").get();
//        SearchHits searchHits = response.getHits();
//        System.out.println(searchHits.getTotalHits());
//
//        searchHits.forEach(searchHitFields -> {
//            System.out.print(searchHitFields.getId());
//            System.out.print(searchHitFields.getSource().get("id"));
//            System.out.println(searchHitFields.getSource().get("bzdz"));
//        });

//        QueryBuilder query = QueryBuilders.matchPhraseQuery("bzdz", "李圩组21号");
        QueryBuilder query = QueryBuilders.termQuery("_id", "-1");
        SearchResponse response = client.prepareSearch("zs_building").setQuery(query).setFrom(0).setSize(10).get();
        
        SearchHits searchHits = response.getHits();
        System.out.println(searchHits.getTotalHits());
        
        searchHits.forEach(searchHitFields -> {
            System.out.print(searchHitFields.getId());
            System.out.print(searchHitFields.getSource().get("id"));
            System.out.println(searchHitFields.getSource().get("bzdz"));
            System.out.println(searchHitFields.getSource().get("lzzt"));
        });
    }
    
    @Test
    public void deleteTest()
    {
        DeleteResponse response = client.prepareDelete("zs_building", "fulltext", "306").execute().actionGet();
        System.out.println(response.getResult());
    }
    
    @Test
    public void updateTest() throws IOException
    {
        client.prepareUpdate("zs_building", "fulltext", "306")
                .setDoc(jsonBuilder().startObject().field("bzdz", "宿迁市泗洪县归仁镇姜冯村李圩组146号").endObject())
                .get();
    }
    
    @Test
    public void insertTest()
            throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException
    {
        Building building = new Building();
        building.setId(-1L);
        building.setFjdm("321324");
        building.setPcsdm("321324770000");
        building.setQxdm("321324");
        building.setXzjddm("321324108");
        building.setCjwhdm("321324108211");
        building.setBzdz("宿迁市泗洪县归仁镇姜冯村李圩组146号");
        building.setLzzt(5);
        building.setLzbj(1);
        building.setLzlx(3);
        building.setSfsc(0);
        building.setDzlx(1);
        building.setSfls(0);
        
//        System.out.println(save(building, client, building.getId()));
//        Class clazz = building.getClass();
//        ESDocument esDocument = (ESDocument) clazz.getAnnotation(ESDocument.class);
//        Field[] fields = clazz.getDeclaredFields();
//
//        XContentBuilder builder = jsonBuilder().startObject();
//        for (Field field : fields)
//        {
//            ESField esField = field.getAnnotation(ESField.class);
//            if (esField == null)
//            {
//                continue;
//            }
//            String fieldName = field.getName();
//            if ("serialVersionUID".equals(fieldName))
//            {
//                continue;
//            }
//            String firstLetter = fieldName.substring(0, 1).toUpperCase();
//            String getter = "get" + firstLetter + fieldName.substring(1);
//            Method method = building.getClass().getMethod(getter);
//            Object value = method.invoke(building);
//            builder.field(fieldName, value);
//        }
//        builder.endObject();
//
//        IndexResponse response = client.prepareIndex(esDocument.indexName(), esDocument.type(), building.getId().toString()).setSource(builder).get();
//        System.out.println(response.status());
    }
    
    /**
     * 聚合测试
     */
    @Test
    public void testAggregation()
    {
        QueryBuilder query = QueryBuilders.matchQuery("bzdz", "张庄组");
        SearchResponse response = client.prepareSearch("zs_building")
                .addAggregation(AggregationBuilders.terms("lzzt").field("lzzt"))
                .addAggregation(AggregationBuilders.terms("lzbj").field("lzbj"))
                .addAggregation(AggregationBuilders.terms("lzlx").field("lzlx"))
                .addAggregation(AggregationBuilders.terms("sfls").field("sfls"))
                .addAggregation(AggregationBuilders.terms("dzlx").field("dzlx"))
                .addAggregation(AggregationBuilders.terms("fjdm").field("fjdm"))
                .addAggregation(AggregationBuilders.terms("pcsdm").field("pcsdm"))
                .addAggregation(AggregationBuilders.terms("qxdm").field("qxdm"))
                .addAggregation(AggregationBuilders.terms("xzjddm").field("xzjddm"))
                .addAggregation(AggregationBuilders.terms("cjwhdm").field("cjwhdm"))
                .addAggregation(AggregationBuilders.terms("jlxdm").field("jlxdm"))
                .setQuery(query)
                .execute()
                .actionGet();
        Terms terms = response.getAggregations().get("lzzt");
        terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
        
        terms = response.getAggregations().get("fjdm");
        terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
        
        terms = response.getAggregations().get("qxdm");
        terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
    }
    
    @Test
    public void testObj() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
    {
        QueryBuilder query = QueryBuilders.termQuery("_id", "1721544");
        SearchResponse response = client.prepareSearch("zs_building").setQuery(query).setFrom(0).setSize(10).get();
        
        SearchHits searchHits = response.getHits();
        for (SearchHit hit : searchHits)
        {
            Building building = (Building) ESUtil.searchHitToObj(new Building(), hit);
            System.out.println(building.getBzdz());
        }
    }
    
    @Test
    public void lplTest()
    {
        //根据 任务id分组进行求和
        SearchRequestBuilder sbuilder = client.prepareSearch("zs_resident");
        //根据taskid进行分组统计,统计出的列别名叫sum
        TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("hjlx");
        
        sbuilder.addAggregation(termsBuilder);
        SearchResponse responses = sbuilder.execute().actionGet();
        //得到这个分组的数据集合
        Terms terms = responses.getAggregations().get("sum");
        for (int i = 0; i < terms.getBuckets().size(); i++)
        {
            //statistics
            String id = terms.getBuckets().get(i).getKey().toString();//id
            Long sum = terms.getBuckets().get(i).getDocCount();//数量
            System.out.println(
                    "==" + terms.getBuckets().get(i).getDocCount() + "------" + terms.getBuckets().get(i).getKey());
        }
        //分别打印出统计的数量和id值
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值