在执行之前,需要先打开 elasticSearch
别忘了打开 elasticsearch - head
新建 springBoot 项目,引入 NoSql 中的 elasticSearch maven 依赖
首先,编写 config 类
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}
然后,在 springBoot 的测试类中进行测试:
1、创建索引// 测试索引的创建
@Test
void testCreateIndex() throws IOException {
// 1、创建索引的请求
CreateIndexRequest request = new CreateIndexRequest("thx_index");
// 2、执行创建请求
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
打开 9100 端口,能够看到索引,说明创建成功
// 测试获取索引,只能判断是否存在
@Test
void testExist() throws IOException {
GetIndexRequest request = new GetIndexRequest("thx_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
返回结果 true 说明存在
3、删除索引// 测试删除索引
@Test
void testDeleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("thx_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
9100 端口看不到索引,说明删除成功
4、添加文档(需要 user 实体类)(如果不设置 id, 那么就是随机值)
// 测试添加文档
@Test
void testAdddocument() throws IOException {
// 创建对象
User user = new User("thx", 4);
// 创建请求
IndexRequest request = new IndexRequest("thx_index");
request.id("1");
request.timeout(Timevalue.timevalueSeconds(10));
// 将数据放入请求
request.source(JSON.toJSONString(user), XContentType.JSON);
// 客户端发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
// 命令返回的状态
System.out.println(indexResponse.status());
}
点开数据浏览查看文档信息
// 获取文档,判断是否存在
@Test
void testIsExists() throws IOException {
// 这里有两个对象,第一个是索引,第二个是 id
GetRequest getRequest = new GetRequest("thx_index", "1");
// 不获取返回的上下文,效率更高
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
6、获取文档的信息
// 获取文档的信息
@Test
void testGetdocument() throws IOException {
// 获取 id 是 1 的文档信息
GetRequest getRequest = new GetRequest("thx_index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
// 打印文档的内容
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse);
}
7、 更新文档信息
// 更新文档信息
@Test
void testUpdatedocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("thx_index", "1");
updateRequest.timeout("10s");
User user = new User("唐昊翔2", 12);
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(updateResponse);
}
8、删除文档
// 删除文档记录
@Test
void testDeletedocument() throws IOException {
DeleteRequest request = new DeleteRequest("thx_index", "1");
request.timeout("10s");
DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
9、批量插入文档
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
List list = new ArrayList<>();
list.add(new User("thx", 1));
list.add(new User("thx", 2));
list.add(new User("thx", 3));
list.add(new User("thx", 4));
list.add(new User("thx", 5));
list.add(new User("thx", 6));
for (int i = 0; i < list.size(); i++) {
// 批量更新和删除在这里修改即可
bulkRequest.add(
new IndexRequest("thx_index")
// 不设置就是随机的 id
.id("" + (i + 1)).
source(JSON.toJSONString(list.get(i)), XContentType.JSON));
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures());
}
10、查询文档信息:
// 查询是最重要的
@Test
void testSearchdocument() throws IOException {
SearchRequest searchRequest = new SearchRequest("thx_index");
// 构建搜索的条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 构建查询,查询条件,使用 QueryBuilders 工具来实现
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "thx");
// 查询所有
// MatchAllQueryBuilder termQueryBuilder1 = QueryBuilders.matchAllQuery();
sourceBuilder.query(termQueryBuilder);
// sourceBuilder.from();
// sourceBuilder.size();
sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
// 构建搜索
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse.getHits()));
System.out.println("====================");
for (SearchHit documentFields : searchResponse.getHits().getHits()) {
System.out.println(documentFields.getSourceAsMap());
}
}
看到文档内容,说明查询成功
完整代码:
package com.cnmb.thx;
import com.alibaba.fastjson.JSON;
import com.cnmb.thx.entity.User;
import net.minidev.json.JSONArray;
import org.apache.lucene.util.QueryBuilder;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkAction;
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.MatchAllQueryBuilder;
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 javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@SpringBootTest
class ApplicationTests {
@Resource
private RestHighLevelClient client;
// 测试索引的创建
@Test
void testCreateIndex() throws IOException {
// 1、创建索引的请求
CreateIndexRequest request = new CreateIndexRequest("thx_index");
// 2、执行创建请求
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
// 测试获取索引,只能判断是否存在
@Test
void testExist() throws IOException {
GetIndexRequest request = new GetIndexRequest("thx_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
// 测试删除索引
@Test
void testDeleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("thx_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
// 测试添加文档
@Test
void testAdddocument() throws IOException {
// 创建对象
User user = new User("thx", 4);
// 创建请求
IndexRequest request = new IndexRequest("thx_index");
request.id("1");
request.timeout(Timevalue.timevalueSeconds(10));
// 将数据放入请求
request.source(JSON.toJSONString(user), XContentType.JSON);
// 客户端发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
// 命令返回的状态
System.out.println(indexResponse.status());
}
// 获取文档,判断是否存在
@Test
void testIsExists() throws IOException {
GetRequest getRequest = new GetRequest("thx_index", "1");
// 不获取返回的上下文,效率更高
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
// 获取文档的信息
@Test
void testGetdocument() throws IOException {
GetRequest getRequest = new GetRequest("thx_index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
// 打印文档的内容
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse);
}
// 更新文档信息
@Test
void testUpdatedocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("thx_index", "1");
updateRequest.timeout("10s");
User user = new User("唐昊翔2", 12);
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(updateResponse);
}
// 删除文档记录
@Test
void testDeletedocument() throws IOException {
DeleteRequest request = new DeleteRequest("thx_index", "1");
request.timeout("10s");
DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
List list = new ArrayList<>();
list.add(new User("thx", 1));
list.add(new User("thx", 2));
list.add(new User("thx", 3));
list.add(new User("thx", 4));
list.add(new User("thx", 5));
list.add(new User("thx", 6));
for (int i = 0; i < list.size(); i++) {
// 批量更新和删除在这里修改即可
bulkRequest.add(
new IndexRequest("thx_index")
// 不设置就是随机的 id
.id("" + (i + 1)).
source(JSON.toJSONString(list.get(i)), XContentType.JSON));
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures());
}
// 查询是最重要的
@Test
void testSearchdocument() throws IOException {
SearchRequest searchRequest = new SearchRequest("thx_index");
// 构建搜索的条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 构建查询,查询条件,使用 QueryBuilders 工具来实现
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "thx");
// 查询所有
// MatchAllQueryBuilder termQueryBuilder1 = QueryBuilders.matchAllQuery();
sourceBuilder.query(termQueryBuilder);
// sourceBuilder.from();
// sourceBuilder.size();
sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
// 构建搜索
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse.getHits()));
System.out.println("====================");
for (SearchHit documentFields : searchResponse.getHits().getHits()) {
System.out.println(documentFields.getSourceAsMap());
}
}
}



