当前位置:   article > 正文

java操作Elastic Search实现数据的处理_java ela csdn

java ela csdn

一、依赖导入

在操作Elastic Search首先需要导入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.elasticsearch</groupId>
  4. <artifactId>elasticsearch</artifactId>
  5. <version>7.8.0</version>
  6. </dependency>
  7. <!-- elasticsearch的客户端 -->
  8. <dependency>
  9. <groupId>org.elasticsearch.client</groupId>
  10. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  11. <version>7.8.0</version>
  12. </dependency>
  13. <!-- elasticsearch依赖2.x的log4j -->
  14. <dependency>
  15. <groupId>org.apache.logging.log4j</groupId>
  16. <artifactId>log4j-api</artifactId>
  17. <version>2.8.2</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.logging.log4j</groupId>
  21. <artifactId>log4j-core</artifactId>
  22. <version>2.8.2</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.fasterxml.jackson.core</groupId>
  26. <artifactId>jackson-databind</artifactId>
  27. <version>2.9.9</version>
  28. </dependency>
  29. <!-- junit单元测试 -->
  30. <dependency>
  31. <groupId>junit</groupId>
  32. <artifactId>junit</artifactId>
  33. <version>4.12</version>
  34. </dependency>
  35. </dependencies>

 

二、创建Elastic Search客户端

  1. public static void main(String[] args) throws Exception {
  2. // 创建ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. // 关闭ES客户端
  7. esClient.close();
  8. }

三、索引相关操作

1、创建索引

  1. public static void main(String[] args) throws Exception {
  2. // 创建ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. // 创建索引
  7. CreateIndexRequest request = new CreateIndexRequest("user");
  8. CreateIndexResponse createIndexResponse =
  9. esClient.indices().create(request, RequestOptions.DEFAULT);
  10. // 响应状态
  11. boolean acknowledged = createIndexResponse.isAcknowledged();
  12. System.out.println("索引操作 :" + acknowledged);
  13. esClient.close();
  14. }

 

2、删除索引

  1. public static void main(String[] args) throws Exception {
  2. // 创建ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. // 删除索引
  7. DeleteIndexRequest request = new DeleteIndexRequest("user");
  8. AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
  9. // 响应状态
  10. System.out.println(response.isAcknowledged());
  11. esClient.close();
  12. }

3、查询索引

  1. public static void main(String[] args) throws Exception {
  2. // 创建ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. // 查询索引
  7. GetIndexRequest request = new GetIndexRequest("user");
  8. GetIndexResponse getIndexResponse =
  9. esClient.indices().get(request, RequestOptions.DEFAULT);
  10. // 响应状态
  11. System.out.println(getIndexResponse.getAliases());
  12. System.out.println(getIndexResponse.getMappings());
  13. System.out.println(getIndexResponse.getSettings());
  14. esClient.close();
  15. }

四、数据相关操作

1、插入数据

  1. //实体类
  2. public class User {
  3. private String name;
  4. private String sex;
  5. private Integer age;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String getSex() {
  13. return sex;
  14. }
  15. public void setSex(String sex) {
  16. this.sex = sex;
  17. }
  18. public Integer getAge() {
  19. return age;
  20. }
  21. public void setAge(Integer age) {
  22. this.age = age;
  23. }
  24. }
  25. //main方法
  26. public static void main(String[] args) throws Exception {
  27. RestHighLevelClient esClient = new RestHighLevelClient(
  28. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  29. );
  30. // 插入数据
  31. IndexRequest request = new IndexRequest();
  32. request.index("user").id("1001");
  33. User user = new User();
  34. user.setName("zhangsan");
  35. user.setAge(30);
  36. user.setSex("男");
  37. // 向ES插入数据,必须将数据转换位JSON格式
  38. ObjectMapper mapper = new ObjectMapper();
  39. String userJson = mapper.writeValueAsString(user);
  40. request.source(userJson, XContentType.JSON);
  41. IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
  42. System.out.println(response.getResult());
  43. esClient.close();
  44. }

 

2、删除数据

  1. public static void main(String[] args) throws Exception {
  2. //获取ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. //指定删除对象
  7. DeleteRequest request = new DeleteRequest();
  8. request.index("user").id("1001");
  9. //删除数据
  10. DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
  11. System.out.println(response.toString());
  12. esClient.close();
  13. }

3、获取数据

  1. public static void main(String[] args) throws Exception {
  2. //获取ES对象
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. // 查询数据
  7. GetRequest request = new GetRequest();
  8. request.index("user").id("1001");
  9. GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
  10. System.out.println(response.getSourceAsString());
  11. //关闭ES客户端
  12. esClient.close();
  13. }

4、查询操作

  1. public static void main(String[] args) throws Exception {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 1. 查询索引的所有数据
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构造查询条件
  9. SearchSourceBuilder builder = new SearchSourceBuilder();
  10. builder.query(QueryBuilders.matchAllQuery());
  11. request.source(builder);
  12. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  13. SearchHits hits = response.getHits();
  14. System.out.println(response.getTook());
  15. System.out.println(hits.getTotalHits());
  16. Iterator<SearchHit> iterator = hits.iterator();
  17. while (iterator.hasNext()) {
  18. SearchHit hit = iterator.next();
  19. System.out.println(hit.getSourceAsString());
  20. }
  21. esClient.close();
  22. }

5、条件查询

  1. public static void main(String[] args) throws Exception {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //1. 查询索引中全部的数据
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
  9. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  10. SearchHits hits = response.getHits();
  11. System.out.println(hits.getTotalHits());
  12. System.out.println(response.getTook());
  13. for ( SearchHit hit : hits ) {
  14. System.out.println(hit.getSourceAsString());
  15. }
  16. //2. 条件查询 : termQuery
  17. SearchRequest request = new SearchRequest();
  18. request.indices("user");
  19. request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 30)));
  20. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  21. SearchHits hits = response.getHits();
  22. System.out.println(hits.getTotalHits());
  23. System.out.println(response.getTook());
  24. for ( SearchHit hit : hits ) {
  25. System.out.println(hit.getSourceAsString());
  26. }
  27. //3. 分页查询
  28. SearchRequest request = new SearchRequest();
  29. request.indices("user");
  30. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
  31. // (当前页码-1)*每页显示数据条数
  32. builder.from(2);
  33. builder.size(2);
  34. request.source(builder);
  35. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  36. SearchHits hits = response.getHits();
  37. System.out.println(hits.getTotalHits());
  38. System.out.println(response.getTook());
  39. for ( SearchHit hit : hits ) {
  40. System.out.println(hit.getSourceAsString());
  41. }
  42. // 4. 查询排序
  43. SearchRequest request = new SearchRequest();
  44. request.indices("user");
  45. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
  46. //
  47. builder.sort("age", SortOrder.DESC);
  48. request.source(builder);
  49. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  50. SearchHits hits = response.getHits();
  51. System.out.println(hits.getTotalHits());
  52. System.out.println(response.getTook());
  53. for ( SearchHit hit : hits ) {
  54. System.out.println(hit.getSourceAsString());
  55. }
  56. // 5. 过滤字段
  57. SearchRequest request = new SearchRequest();
  58. request.indices("user");
  59. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
  60. //
  61. String[] excludes = {"age"};
  62. String[] includes = {};
  63. builder.fetchSource(includes, excludes);
  64. request.source(builder);
  65. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  66. SearchHits hits = response.getHits();
  67. System.out.println(hits.getTotalHits());
  68. System.out.println(response.getTook());
  69. for ( SearchHit hit : hits ) {
  70. System.out.println(hit.getSourceAsString());
  71. }
  72. // 6. 组合查询
  73. SearchRequest request = new SearchRequest();
  74. request.indices("user");
  75. SearchSourceBuilder builder = new SearchSourceBuilder();
  76. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  77. //boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
  78. //boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));
  79. //boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));
  80. boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
  81. boolQueryBuilder.should(QueryBuilders.matchQuery("age", 40));
  82. builder.query(boolQueryBuilder);
  83. request.source(builder);
  84. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  85. SearchHits hits = response.getHits();
  86. System.out.println(hits.getTotalHits());
  87. System.out.println(response.getTook());
  88. for ( SearchHit hit : hits ) {
  89. System.out.println(hit.getSourceAsString());
  90. }
  91. // 7. 范围查询
  92. SearchRequest request = new SearchRequest();
  93. request.indices("user");
  94. SearchSourceBuilder builder = new SearchSourceBuilder();
  95. RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
  96. rangeQuery.gte(30);
  97. rangeQuery.lt(50);
  98. builder.query(rangeQuery);
  99. request.source(builder);
  100. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  101. SearchHits hits = response.getHits();
  102. System.out.println(hits.getTotalHits());
  103. System.out.println(response.getTook());
  104. for ( SearchHit hit : hits ) {
  105. System.out.println(hit.getSourceAsString());
  106. }
  107. //8. 模糊查询
  108. SearchRequest request = new SearchRequest();
  109. request.indices("user");
  110. SearchSourceBuilder builder = new SearchSourceBuilder();
  111. builder.query(QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.TWO));
  112. request.source(builder);
  113. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  114. SearchHits hits = response.getHits();
  115. System.out.println(hits.getTotalHits());
  116. System.out.println(response.getTook());
  117. for ( SearchHit hit : hits ) {
  118. System.out.println(hit.getSourceAsString());
  119. }
  120. // 9. 高亮查询
  121. SearchRequest request = new SearchRequest();
  122. request.indices("user");
  123. SearchSourceBuilder builder = new SearchSourceBuilder();
  124. TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "zhangsan");
  125. HighlightBuilder highlightBuilder = new HighlightBuilder();
  126. highlightBuilder.preTags("<font color='red'>");
  127. highlightBuilder.postTags("</font>");
  128. highlightBuilder.field("name");
  129. builder.highlighter(highlightBuilder);
  130. builder.query(termsQueryBuilder);
  131. request.source(builder);
  132. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  133. SearchHits hits = response.getHits();
  134. System.out.println(hits.getTotalHits());
  135. System.out.println(response.getTook());
  136. for ( SearchHit hit : hits ) {
  137. System.out.println(hit.getSourceAsString());
  138. }
  139. // 10. 聚合查询
  140. SearchRequest request = new SearchRequest();
  141. request.indices("user");
  142. SearchSourceBuilder builder = new SearchSourceBuilder();
  143. AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
  144. builder.aggregation(aggregationBuilder);
  145. request.source(builder);
  146. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  147. SearchHits hits = response.getHits();
  148. System.out.println(hits.getTotalHits());
  149. System.out.println(response.getTook());
  150. for ( SearchHit hit : hits ) {
  151. System.out.println(hit.getSourceAsString());
  152. }
  153. // 11. 分组查询
  154. SearchRequest request = new SearchRequest();
  155. request.indices("user");
  156. SearchSourceBuilder builder = new SearchSourceBuilder();
  157. AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
  158. builder.aggregation(aggregationBuilder);
  159. request.source(builder);
  160. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  161. SearchHits hits = response.getHits();
  162. System.out.println(hits.getTotalHits());
  163. System.out.println(response.getTook());
  164. for ( SearchHit hit : hits ) {
  165. System.out.println(hit.getSourceAsString());
  166. }
  167. //关闭ES客户端
  168. esClient.close();
  169. }

6、更新数据

  1. public static void main(String[] args) throws Exception {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 查询索引
  6. GetIndexRequest request = new GetIndexRequest("user");
  7. GetIndexResponse getIndexResponse =
  8. esClient.indices().get(request, RequestOptions.DEFAULT);
  9. // 响应状态
  10. System.out.println(getIndexResponse.getAliases());
  11. System.out.println(getIndexResponse.getMappings());
  12. System.out.println(getIndexResponse.getSettings());
  13. esClient.close();
  14. }

五、批处理

1、批量新增

  1. public static void main(String[] args) throws Exception {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 批量插入数据
  6. BulkRequest request = new BulkRequest();
  7. request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "zhangsan", "age",30,"sex","男"));
  8. request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "lisi", "age",30,"sex","女"));
  9. request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "wangwu", "age",40,"sex","男"));
  10. request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "wangwu1", "age",40,"sex","女"));
  11. request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON, "name", "wangwu2", "age",50,"sex","男"));
  12. request.add(new IndexRequest().index("user").id("1006").source(XContentType.JSON, "name", "wangwu3", "age",50,"sex","男"));
  13. request.add(new IndexRequest().index("user").id("1007").source(XContentType.JSON, "name", "wangwu44", "age",60,"sex","男"));
  14. request.add(new IndexRequest().index("user").id("1008").source(XContentType.JSON, "name", "wangwu555", "age",60,"sex","男"));
  15. request.add(new IndexRequest().index("user").id("1009").source(XContentType.JSON, "name", "wangwu66666", "age",60,"sex","男"));
  16. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
  17. System.out.println(response.getTook());
  18. System.out.println(response.getItems());
  19. esClient.close();
  20. }

 

2、批量删除

  1. public static void main(String[] args) throws Exception {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 批量删除数据
  6. BulkRequest request = new BulkRequest();
  7. request.add(new DeleteRequest().index("user").id("1001"));
  8. request.add(new DeleteRequest().index("user").id("1002"));
  9. request.add(new DeleteRequest().index("user").id("1003"));
  10. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
  11. System.out.println(response.getTook());
  12. System.out.println(response.getItems());
  13. esClient.close();
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/68817
推荐阅读
相关标签
  

闽ICP备14008679号