1.环境依赖
1.官方文档地址
https://www.elastic.co/guide/index.html
2.maven依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
2.客户端配置
package com.fs.es.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author fs
* @date 2020/12/11 ES配置
*/
@Configuration
public class EsConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
//集群可以构建多个
/* new HttpHost("localhost", 9200, "http"),*/
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
3.java对ES的操作代码
package com.fs.es;
import com.alibaba.fastjson.JSON;
import com.fs.es.goods.service.IGoodsService;
import com.fs.es.user.domain.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
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.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
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.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
@SpringBootTest
class EsDemoApplicationTests {
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 创建索引
*/
@Test
void createIndex() throws IOException {
//1.创建索引
CreateIndexRequest createIndexRequest = new CreateIndexRequest("fs");
//2.执行请求-请求后获取响应
CreateIndexResponse createIndexResponse =
restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse.isAcknowledged());
}
//获取索引-判断是否存在
@Test
void existIndex() throws IOException {
GetIndexRequest getIndexRequest = new GetIndexRequest("fs");
Boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
//删除索引
@Test
void deleteIndex() throws IOException {
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("fs");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
//创建文档
@Test
void addDocument() throws IOException {
//创建对象
User user = new User("fs", 18L);
//创建请求链接
IndexRequest indexRequest = new IndexRequest("fs1");
//创建索引规则
indexRequest.id("5");
indexRequest.timeout("1s");
//将我们的数据放入json
IndexRequest source = indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求,获取响应结果
IndexResponse response = restHighLevelClient.index(source, RequestOptions.DEFAULT);
System.out.println(response.status());
}
//判断文档是否存在
@Test
void existDocument() throws IOException {
GetRequest request = new GetRequest("fs", "1");
//不返回数据查询速度更快-这两个可以不写
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
Boolean b = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
}
//获取文档信息
@Test
void getDocument() throws IOException {
GetRequest request = new GetRequest("fs", "1");
GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
//打印文档内容
System.out.println(response.getSourceAsString());
//返回全部内容
System.out.println(response);
}
//获取文档信息
@Test
void updateDocument() throws IOException {
User user = new User("北辰君", 20L);
UpdateRequest request = new UpdateRequest("fs", "1");
request.timeout("1s");
request.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
//删除文档信息
@Test
void deleteDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("fs", "1");
deleteRequest.timeout("1s");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
//批量新增
@Test
void addBulkDocument() throws IOException {
ArrayList<User> userArrayList = new ArrayList<>();
userArrayList.add(new User("北辰君", 20L));
userArrayList.add(new User("晚风", 18L));
userArrayList.add(new User("苏卿仪", 18L));
userArrayList.add(new User("苏卿卿", 20L));
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
for (int i = 0; i < userArrayList.size(); i++) {
bulkRequest.add(
new IndexRequest("fs1")
.id("" + (i + 1))
.source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON)
);
}
BulkResponse response = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
//是否失败,返回false表示成功
System.out.println(response.hasFailures());
}
//查询
@Test
void search() throws IOException {
SearchRequest searchRequest = new SearchRequest("fs1");
//构建搜索条件
SearchSourceBuilder builder = new SearchSourceBuilder();
//构建高亮
builder.highlighter();
//精确匹配-- QueryBuilders工具类
TermQueryBuilder queryBuilder = QueryBuilders.termQuery("name", "fs");
//查询所有
//QueryBuilders.matchAllQuery();
builder.query(queryBuilder);
//设置超时时间
builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//设置分页-不写有默认参数
/* builder.from(0);
builder.size(1);*/
searchRequest.source(builder);
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(response.getHits()));
System.out.println("========================================");
for (SearchHit documentFile : response.getHits().getHits()
) {
System.out.println(documentFile.getSourceAsMap());
}
}
}