zoukankan      html  css  js  c++  java
  • ElasticSearch学习03--使用Java连接ES

    1.创建项目并测试连接

    1.1 新建一个spring boot的项目,在pom.xml文件中添加如下引用:

     1 <dependencies>
     2         <dependency>
     3             <groupId>org.springframework.boot</groupId>
     4             <artifactId>spring-boot-starter-web</artifactId>
     5         </dependency>
     6         <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
     7         <dependency>
     8             <groupId>org.elasticsearch</groupId>
     9             <artifactId>elasticsearch</artifactId>
    10             <version>7.3.2</version>
    11         </dependency>
    12         <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
    13         <dependency>
    14             <groupId>org.elasticsearch.client</groupId>
    15             <artifactId>elasticsearch-rest-high-level-client</artifactId>
    16             <version>7.3.2</version>
    17         </dependency>
    18         <dependency>
    19             <groupId>junit</groupId>
    20             <artifactId>junit</artifactId>
    21             <version>4.12</version>
    22         </dependency>
    23         <dependency>
    24             <groupId>mysql</groupId>
    25             <artifactId>mysql-connector-java</artifactId>
    26             <scope>runtime</scope>
    27         </dependency>
    28         <dependency>
    29             <groupId>org.projectlombok</groupId>
    30             <artifactId>lombok</artifactId>
    31             <optional>true</optional>
    32         </dependency>
    33         <dependency>
    34             <groupId>org.springframework.boot</groupId>
    35             <artifactId>spring-boot-starter-test</artifactId>
    36             <scope>test</scope>
    37         </dependency>
    38     </dependencies>

    1.2 新建一个工具类,连接ES服务

     1 package com.demo.esdemo.utils;
     2 
     3 import org.apache.http.HttpHost;
     4 import org.elasticsearch.client.RestClient;
     5 import org.elasticsearch.client.RestClientBuilder;
     6 import org.elasticsearch.client.RestHighLevelClient;
     7 
     8 public class ESClient {
     9     public static RestHighLevelClient getClient() {
    10         //创建HttpHost
    11         HttpHost host = new HttpHost("localhost", 9200);
    12 
    13 
    14         // 创建RestClientBuilder
    15         RestClientBuilder builder = RestClient.builder(host);
    16 
    17         // 创建RestHighLevelClient
    18         RestHighLevelClient client = new RestHighLevelClient(builder);
    19 
    20         return client;
    21     }
    22 }

    1.3 测试连接

    1 @Test
    2     void testConnect() {
    3         RestHighLevelClient client = ESClient.getClient();
    4         System.out.println("ok");
    5     }

    1.4 运行测试

    打印"ok",测试通过。

    2.使用Java操作索引

    2.1 使用Java创建索引

     1     String index = "person";
     2     String type = "doc";
     3 
     4 
     5     @Test
     6     void createIndex() throws IOException {
     7         //settings设置
     8         Settings.Builder settings = Settings.builder()
     9                 .put("number_of_shards",3)
    10                 .put("number_of_replicas",1);
    11 
    12 
    13         //mappings设置
    14         XContentBuilder mappings = JsonXContent.contentBuilder()
    15             .startObject()
    16                 .startObject("properties")
    17                     .startObject("name")
    18                         .field("type","text")
    19                     .endObject()
    20                     .startObject("age")
    21                         .field("type","integer")
    22                     .endObject()
    23                     .startObject("birthday")
    24                         .field("type","date")
    25                         .field("format","yyyy-MM-dd")
    26                     .endObject()
    27                 .endObject()
    28             .endObject();
    29 
    30         //将settings和mappings封装到Resquest对象中
    31         CreateIndexRequest request = new CreateIndexRequest(index)
    32                 .settings(settings)
    33                 .mapping(mappings);
    34 
    35         //通过client连接es,并创建索引
    36         RestHighLevelClient client = ESClient.getClient();
    37         CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    38 
    39         //输出
    40         System.out.println(response);
    41     }

    2.2 检查索引是否存在

     1 String index = "person";
     2     String type = "doc";
     3 
     4     @Test
     5     void exists() throws IOException {
     6         //准备request对象
     7         GetIndexRequest request = new GetIndexRequest(index);
     8 
     9         //通过client连接es
    10         RestHighLevelClient client = ESClient.getClient();
    11         boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    12 
    13         //输出
    14         System.out.println(exists);
    15     }

    2.3 删除索引

     1     String index = "person";
     2     String type = "doc";
     3 
     4     @Test
     5     void delete() throws IOException {
     6         //准备request对象
     7 
     8         DeleteIndexRequest request = new DeleteIndexRequest(index);
     9 
    10         //通过client连接es
    11         RestHighLevelClient client = ESClient.getClient();
    12         AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
    13 
    14         //输出
    15         System.out.println(delete.isAcknowledged());
    16     }

    3.使用Java操作文档

    3.1 添加文档

     1     String index = "person";
     2     String type = "doc";
     3 
     4     @Test
     5     void createDoc() throws IOException {
     6         //准备一个json数据
     7         Person person = new Person(1,"张三",18,new Date());
     8         ObjectMapper mapper = new ObjectMapper();
     9         String json = mapper.writeValueAsString(person);
    10 
    11         //准备request对象
    12         IndexRequest request = new IndexRequest(index,"_doc","1");
    13         request.source(json, XContentType.JSON);
    14 
    15         //通过client对象连接es
    16         RestHighLevelClient client = ESClient.getClient();
    17         IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    18 
    19         //输出
    20         System.out.println(response.getResult());
    21     }

    3.2 修改与删除文档

     1     String index = "person";
     2     String type = "doc";
     3 
     4     @Test
     5     void updateDoc() throws IOException {
     6         //创建一个map,指定需要修改的内容
     7         Map<String,Object> doc = new HashMap<>();
     8         doc.put("name","李四");
     9 
    10         //request对象
    11         UpdateRequest request = new UpdateRequest(index,"1");
    12         request.doc(doc);
    13 
    14         //连接es
    15         RestHighLevelClient client = ESClient.getClient();
    16         UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
    17 
    18         //输出
    19         System.out.println(update.getResult());
    20     }

    3.3 删除文档

     1     String index = "person";
     2     String type = "doc";
     3     
     4     @Test
     5     void deleteDoc() throws IOException {
     6         //request对象
     7         DeleteRequest request = new DeleteRequest(index,"1");
     8 
     9         //client执行
    10         RestHighLevelClient client = ESClient.getClient();
    11         DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
    12 
    13         //输出
    14         System.out.println(delete.getResult());
    15     }

    4.批量操作文档

    4.1 批量添加文档

     1     String index = "person";
     2     String type = "doc";
     3 
     4     @Test
     5     void bulkCreateDoc() throws IOException {
     6         //准备一个json数据
     7         Person person1 = new Person(1,"张三",18,new Date());
     8         Person person2 = new Person(2,"李四",20,new Date());
     9         Person person3 = new Person(3,"王五",24,new Date());
    10         ObjectMapper mapper = new ObjectMapper();
    11         String json1 = mapper.writeValueAsString(person1);
    12         String json2 = mapper.writeValueAsString(person2);
    13         String json3 = mapper.writeValueAsString(person3);
    14 
    15         //准备request对象
    16         BulkRequest request = new BulkRequest();
    17         request.add(new IndexRequest(index,"_doc",person1.getId().toString()).source(json1,XContentType.JSON));
    18         request.add(new IndexRequest(index,"_doc",person2.getId().toString()).source(json2,XContentType.JSON));
    19         request.add(new IndexRequest(index,"_doc",person3.getId().toString()).source(json3,XContentType.JSON));
    20 
    21 
    22         //通过client对象连接es
    23         RestHighLevelClient client = ESClient.getClient();
    24         BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
    25 
    26         //输出
    27         System.out.println(response);
    28     }

    4.2 批量删除文档

     1     String index = "person";
     2     String type = "_doc";
     3 
     4     @Test
     5     void buldDeleteDoc() throws IOException {
     6         BulkRequest request = new BulkRequest();
     7         request.add(new DeleteRequest(index,type,"1"));
     8         request.add(new DeleteRequest(index,type,"2"));
     9         request.add(new DeleteRequest(index,type,"3"));
    10 
    11         RestHighLevelClient client = ESClient.getClient();
    12         BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
    13 
    14         System.out.println(response);
    15     }

    5.查询文档

    5.1 使用term方式查询

     1     String index = "book";
     2     String type = "_doc";
     3 
     4     @Test
     5     void termQuery() throws IOException {
     6         //request
     7         SearchRequest request = new SearchRequest(index);
     8         //request.searchType(type);
     9 
    10         //指定查询条件
    11         SearchSourceBuilder builder = new SearchSourceBuilder();
    12         builder.from(0);
    13         builder.size(5);
    14         builder.query(QueryBuilders.termQuery("name","机器"));
    15 
    16         request.source(builder);
    17 
    18         RestHighLevelClient client = ESClient.getClient();
    19         SearchResponse search = client.search(request, RequestOptions.DEFAULT);
    20 
    21         for(SearchHit hit:search.getHits().getHits()){
    22             Map<String,Object> result = hit.getSourceAsMap();
    23             System.out.println(result);
    24         }
    25     }

    查询结果是是正确的。 

  • 相关阅读:
    25-javaweb接入支付宝支付接口
    4-js 函数
    24-filter-拦截器
    23-新建maven 项目
    22-maven-安装与配置
    15-matlab矩阵运用
    2018.7.18 div,section,article的区别和使用
    2018.7.17 牛客网训练
    2018.7.16常用推荐算法
    2018.7.15 解决css中input输入框点击时去掉外边框方法
  • 原文地址:https://www.cnblogs.com/asenyang/p/14369642.html
Copyright © 2011-2022 走看看