一、maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dw</groupId>
<artifactId>estest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>estest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- elasticsearch引入依赖 start -->
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、es配置
yaml配置
elasticsearch:
# 多个IP逗号隔开
hosts: 192.168.199.186:9200
java配置类
package com.dw.estest.config;
import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import lombok.Setter;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
/**
* Author:daWang
* Date:2023/7/16 11:58
*/
@ConfigurationProperties(prefix = "elasticsearch") //配置的前缀
@Configuration
public class ClientConfig {
@Setter
private String hosts;
/**
* 解析配置的字符串,转为HttpHost对象数组
* @return
*/
private HttpHost[] toHttpHost() {
if (!StringUtils.hasLength(hosts)) {
throw new RuntimeException("invalid elasticsearch configuration");
}
String[] hostArray = hosts.split(",");
HttpHost[] httpHosts = new HttpHost[hostArray.length];
HttpHost httpHost;
for (int i = 0; i < hostArray.length; i++) {
String[] strings = hostArray[i].split(":");
httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "http");
httpHosts[i] = httpHost;
}
return httpHosts;
}
//rest客户端
@Bean
public ElasticsearchClient elasticsearchClient() {
HttpHost[] httpHosts = toHttpHost();
RestClient restClient = RestClient.builder(httpHosts).build();
RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
return new ElasticsearchClient(transport);
}
//异步客户端
@Bean
public ElasticsearchAsyncClient elasticsearchAsyncClient() {
HttpHost[] httpHosts = toHttpHost();
RestClient restClient = RestClient.builder(httpHosts).build();
RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
return new ElasticsearchAsyncClient(transport);
}
}
三、功能测试
package com.dw.estest;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldSort;
import co.elastic.clients.elasticsearch._types.SortOptions;
import co.elastic.clients.elasticsearch._types.SortOrder;
import co.elastic.clients.elasticsearch._types.query_dsl.MatchAllQuery;
import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.bulk.BulkOperation;
import co.elastic.clients.elasticsearch.core.bulk.CreateOperation;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient;
import com.dw.estest.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@SpringBootTest
class EstestApplicationTests {
@Autowired
ElasticsearchClient elasticsearchClient;
@Test
void contextLoads() throws Exception {
User user = new User();
user.setAge(30);
user.setId(3l);
user.setName("dd");
user.setDateTime(new Date());
user.setUpdate(new Date());
UpdateRequest request = new UpdateRequest.Builder<>().index("test").id(user.getId().toString()).doc(user).build();
UpdateResponse update = elasticsearchClient.update(request, User.class);
System.out.println(update);
}
//添加或修改文档
@Test
void test04() throws Exception {
User user = new User();
user.setAge(30);
user.setId(3l);
user.setName("sss");
user.setDateTime(new Date());
user.setUpdate(new Date());
// 构建IndexRequest对象
IndexRequest request = new IndexRequest.Builder<>().index("test")
.opType(OpType.Index)
.document(user)
.build();
IndexResponse index = elasticsearchClient.index(request);
System.out.println(index);
}
//根据id查询
@Test
void test02() throws Exception {
GetRequest request = new GetRequest.Builder().id("1").index("test").build();
GetResponse<User> userGetResponse = elasticsearchClient.get(request, User.class);
User source = userGetResponse.source();
System.out.println((source));
}
//查询,分页,排序
@Test
void test03() throws Exception {
// 创建搜索请求
SearchRequest request = new SearchRequest.Builder()
.index(Arrays.asList("test"))
.query(fn -> {
//fn.term(t -> t.field("age").value(20));
//fn.match(m -> m.field("name").query("admin"));
fn.matchAll(new MatchAllQuery.Builder().build());
return fn;
})
.sort(Arrays.asList(SortOptions.of(s -> s.field(FieldSort.of(f -> f.field("age").order(SortOrder.Desc))))))
.from(0)
.size(10)
.build();
SearchResponse<User> search = elasticsearchClient.search(request, User.class);
List<Hit<User>> hits = search.hits().hits();
hits.stream().forEach(item -> {
User source = item.source();
System.out.println(source);
});
}
//批量添加
@Test
void testo1() throws Exception {
User user = new User();
user.setAge(20);
user.setId(2l);
user.setName("admin");
List<BulkOperation> list = new ArrayList<>();
list.add(BulkOperation.of(f -> f.create(CreateOperation.of(c -> c.id("2").document(user)))));
BulkRequest request = new BulkRequest.Builder().index("test").operations(list).build();
BulkResponse bulk = elasticsearchClient.bulk(request);
System.out.println(bulk);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...




