Elasticsearch8.4安装及Java Api Client的使用

时间:2025-04-03 09:42:26
  • Elasticsearch Clients官方文档:Elasticsearch Clients | Elastic

  • 选择对应的语言,这里选择使用 Java Client: 8.4

  • SpringBoot 版本选择:SpringBoot 2.7.5

  • ES 依赖引入:

    <!--与ES版本保持一致-->
    <dependency>
        <groupId></groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>8.4.0</version>
    </dependency>
    ​
    <dependency>
        <groupId></groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
    ​
    <!--解决json异常问题-->
    <dependency>
        <groupId></groupId>
        <artifactId>-api</artifactId>
        <version>2.0.1</version>
    </dependency>

  • 配置 ES 的配置类:

    @Configuration
    public class ElasticsearchConfig {
    ​
        @Bean
        public ElasticsearchClient elasticsearchClient() {
            // Create the low-level client
            RestClient restClient = (
                    new HttpHost("127.0.0.1", 9200)).build();
    ​
            // Create the transport with a Jackson mapper
            ElasticsearchTransport transport = 
                    new RestClientTransport(restClient, new JacksonJsonpMapper());
    ​
            // And create the API client
            return new ElasticsearchClient(transport);
        }
    }

  • 测试类:

    1. 注入 ElasticsearchClient 对象:

      @Autowired
      private ElasticsearchClient client;

    2. 创建索引:

      @Test
      public void createIndex() throws IOException {
          // CreateIndexRequest request =
          // new ().index("es_springboot_test").build();
          // CreateIndexResponse createResponse = ().create(request);
          
          // lambda表达式简写
          CreateIndexResponse createResponse =
        ().create(r -> ("es_springboot_test"));
          (createResponse);
      }

    3. 查询索引是否存在:

      注意:这个 ExistsRequest 对象与判断文档的对象名称一样,但是包不一样;

      import ;
          
      @Test
      public void existIndex() throws IOException {
          // ExistsRequest request = new ()
          //         .index("es_springboot_test").build();
          // BooleanResponse exists = ().exists(request);
          
          // lambda表达式简写
          BooleanResponse exists = ()
                  .exists(r -> ("es_springboot_test"));
          boolean value = ();
          (value);
      }

    4. 删除索引:

      @Test
      public void removeIndex() throws IOException {
          // DeleteIndexRequest request =
          //         new ()
          //         .index("es_springboot_test").build();
          // DeleteIndexResponse response = ().delete(request);
          
          // lambda表达式简写
          DeleteIndexResponse response =
                  ().delete(r -> ("es_springboot_test"));
          (response);
      }

    5. 新建文档:通过java对象操作

      @Test
      public void addDocument() throws IOException {
          Student student = new Student(().toString(),
                  "张三",
                  23,
                  ,
                  "北京");
      ​
          // IndexRequest<Object> request = new <>()
          //         .index("es_springboot_test")
          //         .id("1")
          //         .document(student)
          //         .build();
          // IndexResponse response = (request);
          
          // lambda表达式简写
          IndexResponse response = (r -> r
                  .index("es_springboot_test")
                  .id("1")
                  .document(student));
          (response);
      }

    6. 判断文档是否存在:

      注意:这个 ExistsRequest 对象与判断索引的对象名称一样,但是包不一样;

      import ;
      ​
      @Test
      public void existDocument() throws IOException {
          // ExistsRequest request = new ()
          //         .index("es_springboot_test")
          //         .id("1")
          //         .build();
          // BooleanResponse response = (request);
          
          // lambda表达式简写
          BooleanResponse response =
                  (r -> r
                          .index("es_springboot_test")
                          .id("1"));
          boolean value = ();
          (value);
      }

    7. 获取指定id的文档:

      @Test
      public void getDocument() throws IOException {
          // GetRequest request = new ()
          //         .index("es_springboot_test")
          //         .id("1")
          //         .build();
          // GetResponse<Student> response = (request, );
          
          // lambda表达式简写
          GetResponse<Student> response =
                  (r -> ("es_springboot_test").id("1"),
                          );
          (response);
      }

    8. 更新指定id的文档:

      @Test
      public void updateDocument() throws IOException {
          Student student = new Student();
          ("河南");
          // UpdateRequest request = new ()
          //         .index("es_springboot_test")
          //         .id("1")
          //         .doc(student)
          //         .build();
          // UpdateResponse<Student> response = (request, );
          
          // lambda表达式简写
          UpdateResponse<Student> response =
                  (r -> ("es_springboot_test").id("1").doc(student),
                          );
          (response);
      }

    9. 删除指定id的文档:

      @Test
      public void deleteDocument() throws IOException {
          // DeleteRequest request = new ()
          //         .index("es_springboot_test")
          //         .id("1")
          //         .build();
          // DeleteResponse response = (request);
          
          // lambda表达式简写
          DeleteResponse response =
                  (r -> ("es_springboot_test").id("1"));
          (response);
      }

    10. 批量操作文档、索引(文档的增删改查):

      @Test
      public void bulkDocument() throws IOException {
          ArrayList<Student> list = new ArrayList<>();
      ​
           builder = new ()
                  .index("es_springboot_test");
          
          // 循环中操作
          for (int i = 0; i < (); i++) {
              String index = (i + 1);
              Student student = (i);
              // 第一层item为增删改查的方法,第二层为文档操作
              (item -> (v -> v
                      .id(index)
                      .document(student)));
          }
          BulkRequest request = ();
      ​
          BulkResponse response = (request);
          (response);
      }

    11. 搜索查询操作:使用 SearchRequestquery 方法进行查询,highlight 高亮显示;

      @Test
      public void search() throws IOException {
          // Highlight highlight = new ()
          //         .preTags("<p class=\"highlight\">")
          //         .postTags("</p>")
          //         .build();
          // SearchRequest request = new ()
          //         .index("es_springboot_test")
          //         .highlight(highlight)
          //         .query(q -> (t -> ("sex").value(())))
          //         .build();
      ​
          // SearchResponse<Student> response = (request, );
          
          // lambda表达式简写
          SearchResponse<Student> response = (r -> r
                          .index("es_springboot_test")
                          .highlight(h -> h
                                  .preTags("<p class=\"highlight\">")
                                  .fields("sex", v -> v)
                                  .postTags("</p>"))
                          .query(q -> q
                                  .term(t -> t
                                          .field("sex")
                                          .value(()))),
                  );
          (response);
      ​
          HitsMetadata<Student> hits = ();
          List<Hit<Student>> list = ();
          (item -> (()));
      }

  • 相关文章