引入maven依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>rest</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency |
public class ElTest { private static RestClient restClient; private static Gson gson = new Gson(); /** * 初始化RestClient */ @Before public void initRestClient(){ restClient = RestClient.builder( new HttpHost("139.199.119.214", 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); HttpEntity entity = new NStringEntity(gson.toJson(user), ContentType.APPLICATION_JSON); Response indexResponse = restClient.performRequest( "PUT", "userindex/user/100", 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(gson.toJson(user), ContentType.APPLICATION_JSON); Response indexResponse = restClient.performRequest( "POST", "userindex/user/", 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(gson.toJson(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(); } } |
引入maven依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>rest</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency |
public class ElTest { private static RestClient restClient; private static Gson gson = new Gson(); /** * 初始化RestClient */ @Before public void initRestClient(){ restClient = RestClient.builder( new HttpHost("139.199.119.214", 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); HttpEntity entity = new NStringEntity(gson.toJson(user), ContentType.APPLICATION_JSON); Response indexResponse = restClient.performRequest( "PUT", "userindex/user/100", 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(gson.toJson(user), ContentType.APPLICATION_JSON); Response indexResponse = restClient.performRequest( "POST", "userindex/user/", 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(gson.toJson(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(); } } |