通过Kibana来创建mapping
PUT user_db/
{
"mappings": {
"properties": {
"id":{
"type": "keyword",
"index": true
},
"name":{
"type": "text",
"analyzer": "ik_max_word"
, "index": true
},
"age":{
"type": "integer"
, "index": true
}
}
}
}

pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.1</version>
<exclusions>
<exclusion>
<artifactId>elasticsearch</artifactId>
<groupId>org.elasticsearch</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.12.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</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>
</dependencies>
elasticsearch-rest-high-level-client高级客户端配置
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.nio.entity.NStringEntity;
import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.ArrayList;
/**
* @Author: dawang
* @Date: 2020/3/17 18:08
*/
@Slf4j
@Configuration
public class EsConfig {
private static String hosts = "192.168.0.167"; // 集群地址,多个用,隔开
//private static int port = 9200; // 使用的端口号
private static int port = 9200; // 使用的端口号
private static String schema = "http"; // 使用的协议
private static ArrayList<HttpHost> hostList = null;
private static int connectTimeOut = 5000; // 连接超时时间
private static int socketTimeOut = 30000; // 连接超时时间
private static int connectionRequestTimeOut = 1000; // 获取连接的超时时间
private static int maxConnectNum = 100; // 最大连接数
private static int maxConnectPerRoute = 100; // 最大路由连接数
private static RestHighLevelClient highLevelClient;
/********************************************************************************/
/*********************以上配置都可以通过application.yml来配置*************************/
/********************************************************************************/
static {
hostList = new ArrayList<>();
String[] hostStrs = hosts.split(",");
for (String host : hostStrs) {
hostList.add(new HttpHost(host, port, schema));
}
}
@Bean
public RestHighLevelClient restHighLevelClient() {
RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
// 异步httpclient连接延时配置
builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
requestConfigBuilder.setConnectTimeout(connectTimeOut);
requestConfigBuilder.setSocketTimeout(socketTimeOut);
requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
return requestConfigBuilder;
}
});
// 异步httpclient连接数配置
builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
httpClientBuilder.setMaxConnTotal(maxConnectNum);
httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
return httpClientBuilder;
}
});
RestHighLevelClient client = new RestHighLevelClient(builder);
log.info("创建RestHighLevelClient成功:{}",client);
return client;
}
public static int getNowPage(Integer nowPage) {
if (nowPage == null || nowPage <= 0) {
return 0;
} else {
return nowPage -= 1;
}
}
public static int getPageSize(Integer pageSize) {
if (pageSize == null || pageSize <= 0) {
return 10;
} else {
return pageSize;
}
}
}
基本增删改查测试
import com.alibaba.fastjson.JSON;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.GetSourceRequest;
import org.elasticsearch.client.core.GetSourceResponse;
import org.elasticsearch.cluster.metadata.MetadataIndexTemplateService;
import org.elasticsearch.common.xcontent.XContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class EsApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
//根据id查询
@Test
void contextLoads() {
GetSourceRequest getSourceRequest = new GetSourceRequest("user_db", "b-q0Y3kBJJfAIo_YKexY");
try {
GetSourceResponse documentFields = restHighLevelClient.getSource(getSourceRequest, RequestOptions.DEFAULT);
System.out.println(documentFields.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
//复合查询
@Test
void context() throws Exception {
SearchRequest searchRequest = new SearchRequest("user_db");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("id", "abc");
searchSourceBuilder.query(termQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(search.toString());
}
//是否存在
public boolean exists(String index, String id) throws Exception {
GetRequest getRequest = new GetRequest(index, id);
boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
return exists;
}
//修改
@Test
public void test01()throws Exception{
String id="b-q0Y3kBJJfAIo_YKexY";
if (exists("user_db",id)) {
UpdateRequest updateRequest = new UpdateRequest("user_db",id);
updateRequest.doc(createJson(new User("1","王二小",20)),XContentType.JSON);
UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.toString());
}
}
//根据id删除文档
@Test
public void test03() throws Exception {
DeleteRequest user_db = new DeleteRequest("user_db");
user_db.id("b-q0Y3kBJJfAIo_YKexY");
DeleteResponse delete = restHighLevelClient.delete(user_db, RequestOptions.DEFAULT);
System.out.println(delete.toString());
}
//批量操作
@Test
public void test02() throws Exception {
BulkRequest bulkRequest = new BulkRequest("user_db");
IndexRequest indexRequest = new IndexRequest();
User user = new User("adki", "李四2", 18);
indexRequest.id(user.getId());
indexRequest.source(createMap(user));
bulkRequest.add(indexRequest);
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.id("b-q0Y3kBJJfAIo_YKexY");
updateRequest.doc(createMap(new User("kkkk", "万物", 11)));
bulkRequest.add(updateRequest);
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.toString());
}
private <T> Map createMap(T t) {
String string = JSON.toJSONString(t);
Map map = JSON.parseObject(string, Map.class);
return map;
}
private <T> String createJson(T t) {
String string = JSON.toJSONString(t);
return string;
}
}
官方API地址:
https://www.elastic.co/guide/en/elasticsearch/client/index.html

RST高级客户端:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...