//package com.elab.es.data;
//
//import com.alibaba.fastjson.JSON;
//import com.elab.es.model.User;
//import org.apache.commons.io.IOUtils;
//import org.apache.http.Header;
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpHost;
//import org.apache.http.entity.ContentType;
//import org.apache.http.nio.entity.NStringEntity;
//import org.apache.http.util.EntityUtils;
//import org.elasticsearch.client.Response;
//import org.elasticsearch.client.RestClient;
//import org.elasticsearch.client.transport.TransportClient;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//
//import java.io.InputStream;
//import java.util.Collections;
//
///**
// * @author ： liukx
// * @time ： 2019/7/31 - 14:02
// */
//public class DataTest {
//    private static RestClient restClient;
//    private TransportClient transportClient;
//
//
//    /**
//     * 初始化RestClient
//     */
//    @Before
//    public void initRestClient() {
//        restClient = RestClient.builder(
//                new HttpHost("192.168.0.24", 9200, "http")).build();
//    }
//
//    /**
//     * 创建索引(id自己设置，PUT请求)
//     */
//    @Test
//    public void testCreateIndex() throws Exception {
//        User user = new User();
//        user.setId(100L);
//        user.setAge(20);
//        user.setName("张三100");
//        user.setSex(1);
////        IndexRequest request = new IndexRequest("test", "index");
////        request.source(user);
////        request.timeout(TimeValue.timeValueSeconds(1));
////        request.versionType(VersionType.EXTERNAL);
////        request.routing()
//        HttpEntity entity = new NStringEntity(JSON.toJSONString(user), ContentType.APPLICATION_JSON);
//        Response indexResponse = restClient.performRequest(
//                "POST",
//                "/test/user",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(indexResponse.getEntity()));
//    }
//
//    /**
//     * 创建索引(id自动生成，POST请求)
//     */
//    @Test
//    public void testCreateIndex2() throws Exception {
//        User user = new User();
//        user.setAge(20);
//        user.setName("张三");
//        user.setSex(1);
//
//        HttpEntity entity = new NStringEntity(JSON.toJSONString(user), ContentType.APPLICATION_JSON);
//
//        Response indexResponse = restClient.performRequest(
//                "POST",
//                "test",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(indexResponse.getEntity()));
//    }
//
//    /**
//     * 根据id查询
//     *
//     * @throws Exception
//     */
//    @Test
//    public void testFindById() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"match\" : {\n" +
//                " \"id\" : \"100\"\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "GET",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//
//        InputStream content = response.getEntity().getContent();
//        System.out.println("@@@liu" + content.toString());
//        Header[] headers = response.getHeaders();
//        for (Header header : headers) {
//            System.out.println("@@@name" + header.getName());
//            System.out.println("@@@value" + header.getValue());
//        }
//
//
//        /*byte[] b = new byte[1024];
// int lenth = 0;
// while ((lenth=content.read())!=-1){
// int read = content.read(b, 0, lenth);
// System.out.println("!!!"+new String(b,0,read));
// }*/
//        System.out.println("!!!" + IOUtils.toString(content, "UTF-8"));
//    }
//
//    /**
//     * (查询特定字段用户)
//     *
//     * @throws Exception
//     */
//    @Test
//    public void testFindByKey() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"match\" : {\n" +
//                " \"name\" : \"张1\"\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "GET",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//
//    }
//
//    /**
//     * 查询所有(默认返回10条记录)
//     */
//    @Test
//    public void findAll() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": { \"match_all\": {} }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "GET",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//
//    }
//
//    /**
//     * match_all & 返回11到20个文档信息
//     * from：指定文档索引从哪里开始，默认从0开始
//     * size：从from开始，返回多个文档
//     */
//    @Test
//    public void findByPage() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": { \"match_all\": {} },\n" +
//                " \"from\": 10,\n" +
//                " \"size\": 10\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//
//    }
//
//    /**
//     * 根据年龄降序排序查询.默认返回10条
//     */
//    @Test
//    public void findAllByAgeOderBy() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": { \"match_all\": {} },\n" +
//                " \"sort\": { \"age\": { \"order\": \"desc\" } }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 查询返回指定的字段（这样操作有点类似于SQL SELECT FROM field lis）
//     */
//    @Test
//    public void findByLimitField() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": { \"match_all\": {} },\n" +
//                " \"_source\": [\"name\", \"age\"]\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//
//    /**
//     * 布尔值(bool)查询(返回 匹配name=张1 & age=21)
//     */
//    @Test
//    public void findByMustBool() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"bool\": {\n" +
//                " \"must\": [\n" +
//                " { \"match\": { \"name\": \"张1\" } },\n" +
//                " { \"match\": { \"age\": \"21\" } }\n" +
//                " ]\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 布尔值(bool)查询(返回 匹配name=张1 || age=21)
//     */
//    @Test
//    public void findByOrBool() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"bool\": {\n" +
//                " \"should\": [\n" +
//                " { \"match\": { \"name\": \"张1\" } },\n" +
//                " { \"match\": { \"age\": \"21\" } }\n" +
//                " ]\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 布尔值(bool)查询(返回 不匹配name=张1 & age=21)
//     */
//    @Test
//    public void findByMachNotBool() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"bool\": {\n" +
//                " \"must_not\": [\n" +
//                " { \"match\": { \"name\": \"张1\" } },\n" +
//                " { \"match\": { \"age\": \"21\" } }\n" +
//                " ]\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 布尔值(bool)查询(返回 name=张1 & age!=21)
//     */
//    @Test
//    public void findByMachAndNotBool() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"bool\": {\n" +
//                " \"must\": [\n" +
//                " { \"match\": { \"name\": \"张1\" } }\n" +
//                " ],\n" +
//                " \"must_not\": [\n" +
//                " { \"match\": { \"age\": \"21\" } }\n" +
//                " ]\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//
//    /**
//     * 范围查询(age在25到28岁之间)
//     */
//    @Test
//    public void findByRang() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"range\" : {\n" +
//                " \"age\" : {\n" +
//                " \"gte\" : 25,\n" +
//                " \"lte\" : 28,\n" +
//                " \"boost\" : 2.0\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "GET",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 分组查询(按年龄分组查询，降序统计top 10)
//     * 类似 SELECT age, COUNT(*) FROM user GROUP BY age ORDER BY COUNT(*) DESC
//     */
//    @Test
//    public void findByGroup() throws Exception {
//        String DSL = "{\n" +
//                " \"size\": 0,\n" +
//                " \"aggs\": {\n" +
//                " \"group_by_age\": {\n" +
//                " \"terms\": {\n" +
//                " \"field\": \"age\"\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 分组查询(按年龄分组查询，查询组里其他字段的平均值)
//     * 类似 SELECT age, avg(age) FROM user GROUP BY age ORDER BY COUNT(*) DESC
//     */
//    @Test
//    public void findByGroupAndAvag() throws Exception {
//        String DSL = "{\n" +
//                " \"size\": 0,\n" +
//                " \"aggs\": {\n" +
//                " \"group_by_age\": {\n" +
//                " \"terms\": {\n" +
//                " \"field\": \"age\"\n" +
//                " },\n" +
//                " \"aggs\": {\n" +
//                " \"average_age\": {\n" +
//                " \"avg\": {\n" +
//                " \"field\": \"age\"\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 分组查询(按年龄分组查询，并且降序排序)
//     * 类似 SELECT age, avg(age) FROM user GROUP BY age ORDER BY avg(age) DESC
//     */
//    @Test
//    public void findByGroupAndOrderBy() throws Exception {
//        String DSL = "{\n" +
//                " \"size\": 0,\n" +
//                " \"aggs\": {\n" +
//                " \"group_by_age\": {\n" +
//                " \"terms\": {\n" +
//                " \"field\": \"age\",\n" +
//                " \"order\": {\n" +
//                " \"average_age\": \"desc\"\n" +
//                " }\n" +
//                " },\n" +
//                " \"aggs\": {\n" +
//                " \"average_age\": {\n" +
//                " \"avg\": {\n" +
//                " \"field\": \"age\"\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_search",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//
//    /**
//     * 删除操作
//     */
//    @Test
//    public void testDelete() throws Exception {
//        Response response = restClient.performRequest(
//                "DELETE",
//                "userindex/user/100",
//                Collections.<String, String>emptyMap());
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 根据条件删除（使用_delete_by_query,POST请求）
//     */
//    @Test
//    public void testDeleteByQuery() throws Exception {
//        String DSL = "{\n" +
//                " \"query\": {\n" +
//                " \"match\" : {\n" +
//                " \"name\" : \"张1\"\n" +
//                " }\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/_delete_by_query",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//
//    /**
//     * 跟新操作(1. 从旧文档中检索JSON
//     * 2. 修改它
//     * 3. 删除旧文档
//     * 4. 索引新文档)
//     */
//    @Test
//    public void testUpdate() throws Exception {
//        User user = new User();
//        user.setId(100L);
//        user.setAge(20);
//        user.setName("张三修改");
//        user.setSex(1);
//
//        HttpEntity entity = new NStringEntity(JSON.toJSONString(user), ContentType.APPLICATION_JSON);
//
//        Response indexResponse = restClient.performRequest(
//                "PUT",
//                "userindex/user/100",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(indexResponse.getEntity()));
//    }
//
//
//    /**
//     * 局部跟新字段(动态添加字段，添加tags和views字段)
//     */
//    @Test
//    public void testUpdateField() throws Exception {
//        String DSL = "{\n" +
//                " \"doc\" : {\n" +
//                " \"tags\" : [ \"testing\" ],\n" +
//                " \"views\": 0\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/100/_update",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 使用脚本部分跟新字段(将views字段数量加1)
//     */
//    @Test
//    public void testUpdateFieldByScript() throws Exception {
//        String DSL = "{\n" +
//                " \"script\" : \"ctx._source.views+=1\"\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/100/_update",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//    /**
//     * 将search 标签追加到 tags 数组中
//     */
//    @Test
//    public void testUpdateFieldAddByScript() throws Exception {
//        String DSL = "{\n" +
//                " \"script\" : \"ctx._source.tags+=new_tag\",\n" +
//                " \"params\" : {\n" +
//                " \"new_tag\" : \"search\"\n" +
//                " }\n" +
//                "}";
//        HttpEntity entity = new NStringEntity(DSL, ContentType.APPLICATION_JSON);
//        Response response = restClient.performRequest(
//                "POST",
//                "userindex/user/100/_update",
//                Collections.<String, String>emptyMap(),
//                entity);
//        System.out.println(EntityUtils.toString(response.getEntity()));
//    }
//
//
//    @After
//    public void closeRestClient() throws Exception {
//        restClient.close();
//    }
//}
