zoukankan      html  css  js  c++  java
  • ES CRUD

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12097679.html

    Project Directory

    Maven Dependency

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <modelVersion>4.0.0</modelVersion>
     6 
     7     <groupId>org.example</groupId>
     8     <artifactId>hello-es</artifactId>
     9     <version>1.0-SNAPSHOT</version>
    10 
    11     <properties>
    12         <elasticsearch.version>7.5.0</elasticsearch.version>
    13     </properties>
    14 
    15     <dependencies>
    16         <dependency>
    17             <groupId>org.elasticsearch</groupId>
    18             <artifactId>elasticsearch</artifactId>
    19             <version>${elasticsearch.version}</version>
    20         </dependency>
    21         <dependency>
    22             <groupId>org.elasticsearch.client</groupId>
    23             <artifactId>transport</artifactId>
    24             <version>${elasticsearch.version}</version>
    25         </dependency>
    26         <dependency>
    27             <groupId>org.elasticsearch.client</groupId>
    28             <artifactId>elasticsearch-rest-high-level-client</artifactId>
    29             <version>${elasticsearch.version}</version>
    30         </dependency>
    31 
    32         <dependency>
    33             <groupId>org.apache.logging.log4j</groupId>
    34             <artifactId>log4j-core</artifactId>
    35             <version>2.12.1</version>
    36         </dependency>
    37         <dependency>
    38             <groupId>org.apache.logging.log4j</groupId>
    39             <artifactId>log4j-api</artifactId>
    40             <version>2.12.1</version>
    41         </dependency>
    42         <dependency>
    43             <groupId>org.apache.logging.log4j</groupId>
    44             <artifactId>log4j-slf4j-impl</artifactId>
    45             <version>2.12.1</version>
    46         </dependency>
    47 
    48         <dependency>
    49             <groupId>com.fasterxml.jackson.core</groupId>
    50             <artifactId>jackson-databind</artifactId>
    51             <version>2.10.1</version>
    52         </dependency>
    53 
    54         <dependency>
    55             <groupId>org.projectlombok</groupId>
    56             <artifactId>lombok</artifactId>
    57             <version>1.18.10</version>
    58         </dependency>
    59 
    60         <dependency>
    61             <groupId>junit</groupId>
    62             <artifactId>junit</artifactId>
    63             <version>4.12</version>
    64         </dependency>
    65     </dependencies>
    66 
    67     <build>
    68         <plugins>
    69             <plugin>
    70                 <groupId>org.apache.maven.plugins</groupId>
    71                 <artifactId>maven-compiler-plugin</artifactId>
    72                 <version>3.8.1</version>
    73                 <configuration>
    74                     <source>1.8</source>
    75                     <target>1.8</target>
    76                 </configuration>
    77             </plugin>
    78         </plugins>
    79     </build>
    80 </project>
    View Code

    log4j

    1 log4j.rootLogger=info,stdout
    2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    3 log4j.appender.stdout.Target=System.out
    4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    5 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
    View Code

    Source Code

    Book.java

     1 package org.fool.es.model;
     2 
     3 import lombok.Builder;
     4 import lombok.Data;
     5 
     6 import java.util.Date;
     7 
     8 @Data
     9 @Builder
    10 public class Book {
    11     private String name;
    12     private Date publishDate;
    13     private Double price;
    14 }

    ES7TransportClientTest.java

     1 package org.fool.es;
     2 
     3 import org.elasticsearch.action.delete.DeleteResponse;
     4 import org.elasticsearch.action.get.GetResponse;
     5 import org.elasticsearch.action.index.IndexResponse;
     6 import org.elasticsearch.action.update.UpdateResponse;
     7 import org.elasticsearch.client.transport.TransportClient;
     8 import org.elasticsearch.common.settings.Settings;
     9 import org.elasticsearch.common.transport.TransportAddress;
    10 import org.elasticsearch.common.xcontent.XContentType;
    11 import org.elasticsearch.transport.client.PreBuiltTransportClient;
    12 import org.fool.es.model.Book;
    13 import org.fool.es.util.JsonUtils;
    14 import org.junit.After;
    15 import org.junit.Before;
    16 import org.junit.Test;
    17 
    18 import java.net.InetAddress;
    19 import java.util.Date;
    20 
    21 public class ES7TransportClientTest {
    22     private static final String HOST = "127.0.0.1";
    23     private static final int PORT = 9300;
    24 
    25     private TransportClient client;
    26 
    27     @Before
    28     public void getClient() throws Exception {
    29         Settings settings = Settings.builder().put("cluster.name", "haha").build();
    30 
    31         client = new PreBuiltTransportClient(settings)
    32                 .addTransportAddress(new TransportAddress(InetAddress.getByName(HOST), PORT));
    33     }
    34 
    35     @After
    36     public void close() {
    37         if (client != null) {
    38             client.close();
    39         }
    40     }
    41 
    42     @Test
    43     public void testGet() {
    44         GetResponse response = client.prepareGet("book", "_doc", "1").get();
    45         System.out.println(response.getSourceAsString());
    46     }
    47 
    48     @Test
    49     public void testIndex() {
    50         Book book = Book.builder().name("Hello ES").publishDate(new Date()).price(99.0).build();
    51 
    52         IndexResponse indexResponse = client.prepareIndex("book", "_doc", "1")
    53                 .setSource(JsonUtils.objectToJson(book), XContentType.JSON).get();
    54 
    55         System.out.println(indexResponse.getIndex());
    56         System.out.println(indexResponse.getType());
    57         System.out.println(indexResponse.getId());
    58         System.out.println(indexResponse.status());
    59     }
    60 
    61     @Test
    62     public void testUpdate() {
    63         Book book = Book.builder().name("Hello ES Plus").publishDate(new Date()).price(88.0).build();
    64 
    65         UpdateResponse response = client.prepareUpdate("book", "_doc", "1")
    66                 .setDoc(JsonUtils.objectToJson(book), XContentType.JSON).get();
    67 
    68         System.out.println(response.getIndex());
    69         System.out.println(response.getType());
    70         System.out.println(response.getId());
    71         System.out.println(response.status());
    72     }
    73 
    74     @Test
    75     public void testDelete() {
    76         DeleteResponse response = client.prepareDelete("book", "_doc", "1").get();
    77 
    78         System.out.println(response.getIndex());
    79         System.out.println(response.getType());
    80         System.out.println(response.getId());
    81         System.out.println(response.status());
    82     }
    83 }

    Note: 端口号是9300

    TransportClient 是一种轻量级的方法,它通过Socket与Elasticsearch集群连接,是基于Netty 线程池的方式。

    ES7RestClientTest.java

     1 package org.fool.es;
     2 
     3 import org.apache.http.HttpHost;
     4 import org.elasticsearch.action.delete.DeleteRequest;
     5 import org.elasticsearch.action.delete.DeleteResponse;
     6 import org.elasticsearch.action.get.GetRequest;
     7 import org.elasticsearch.action.get.GetResponse;
     8 import org.elasticsearch.action.index.IndexRequest;
     9 import org.elasticsearch.action.index.IndexResponse;
    10 import org.elasticsearch.action.update.UpdateRequest;
    11 import org.elasticsearch.action.update.UpdateResponse;
    12 import org.elasticsearch.client.RequestOptions;
    13 import org.elasticsearch.client.RestClient;
    14 import org.elasticsearch.client.RestHighLevelClient;
    15 import org.elasticsearch.common.xcontent.XContentType;
    16 import org.fool.es.model.Book;
    17 import org.fool.es.util.JsonUtils;
    18 import org.junit.After;
    19 import org.junit.Before;
    20 import org.junit.Test;
    21 
    22 import java.util.Date;
    23 import java.util.Objects;
    24 
    25 public class ES7RestClientTest {
    26     private static final String HOST = "127.0.0.1";
    27     private static final int PORT = 9200;
    28 
    29     private RestHighLevelClient client;
    30 
    31     @Before
    32     public void getClient() {
    33         client = new RestHighLevelClient(RestClient.builder(new HttpHost(HOST, PORT, "http")));
    34     }
    35 
    36     @After
    37     public void close() throws Exception {
    38         if (client != null) {
    39             client.close();
    40         }
    41     }
    42 
    43     @Test
    44     public void testGet() throws Exception {
    45         GetRequest request = new GetRequest("book", "1");
    46 
    47         GetResponse response = client.get(request, RequestOptions.DEFAULT);
    48 
    49         System.out.println(response.getSourceAsString());
    50     }
    51 
    52     @Test
    53     public void testIndex() throws Exception {
    54         Book book = Book.builder().name("Hello ES").publishDate(new Date()).price(99.0).build();
    55 
    56         IndexRequest indexRequest = new IndexRequest("book")
    57                 .source(Objects.requireNonNull(JsonUtils.objectToJson(book)), XContentType.JSON).id("1");
    58 
    59         IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
    60 
    61         System.out.println(indexResponse.getIndex());
    62         System.out.println(indexResponse.getType());
    63         System.out.println(indexResponse.getId());
    64         System.out.println(indexResponse.status());
    65     }
    66 
    67     @Test
    68     public void testUpdate() throws Exception {
    69         Book book = Book.builder().name("Hello ES Plus").publishDate(new Date()).price(88.0).build();
    70 
    71         UpdateRequest request = new UpdateRequest("book", "1");
    72         request.doc(JsonUtils.objectToJson(book), XContentType.JSON);
    73         UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    74 
    75         System.out.println(response.getIndex());
    76         System.out.println(response.getType());
    77         System.out.println(response.getId());
    78         System.out.println(response.status());
    79     }
    80 
    81     @Test
    82     public void testDelete() throws Exception {
    83         DeleteRequest request = new DeleteRequest("book").id("1");
    84         DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
    85 
    86         System.out.println(response.getIndex());
    87         System.out.println(response.getType());
    88         System.out.println(response.getId());
    89         System.out.println(response.status());
    90     }
    91 }

    Note: 端口号是9200

    Elasticsearch 官方推出Java High Level REST Client,它是基于Java Low Level REST Client的封装,并且API接收参数和返回值和TransportClient是一样的,使得代码迁移变得容易并且支持了RESTful的风格,兼容了这两种客户端的优点。

  • 相关阅读:
    python 17 函数基础(一)
    python 17 异常
    python 16 文件操作(二)
    python 15 文件操作(一)
    python 13 字符编码
    《转》python 12 列表解析
    《转》python 11 表达式和语句
    关于int型数据的SQL模糊查询猜想
    PB学习笔记
    JSONObject.fromObject()
  • 原文地址:https://www.cnblogs.com/agilestyle/p/12097679.html
Copyright © 2011-2022 走看看