跟其他的菲关系类型数据库一样集成springboot,在生成代码时,勾选web和非关系数据库里面的ElasticSearch就可以。
demo的git地址我放在下面:
git es demo 代码
这里我主要提两个部分
(一)Java端返回结果警告
一般来说是虑ES security的设置,实际上7.13就开始了加强这个。ES 8直接默认让你去设置security。
我这边用的是7.17版本,设置的是在有yml上:
xpack.security.enabled: false
(二)关于配置类和测试方法类
配置类
package com.es.example.demo.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: zhangpeng * @Date: 2022/2/16 10:56 */ @Configuration public class ElasticSearchClientConfig { @Bean public RestHighLevelClient restHighLevelClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("127.0.0.1", 9200, "http") ) ); return client; } }
测试方法类,主要是多种方法
package com.es.example.demo; import com.alibaba.fastjson.JSON; import com.es.example.demo.DO.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.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.TimeUnit; @SpringBootTest class EsdemoApplicationTests { @Test void contextLoads() { } public static final String INDEX = "zp_test_index"; @Autowired //这个读取@bean要不用人家的原名或者在配置类搞个别名,要不在使用的地方指定好 @Qualifier(value = "restHighLevelClient") private RestHighLevelClient client; // 创建索引 @Test void testCreateIndex() throws IOException { // 1. 创建索引请求 CreateIndexRequest request = new CreateIndexRequest(INDEX); // 2. 客户端执行请求, IndicesClient,请求后获得响应 CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(createIndexResponse); } // 测试索引存在 @Test void testExistsIndex() throws IOException { GetIndexRequest request = new GetIndexRequest(INDEX); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(exists); } // 删除索引 @Test void testDeleteIndex() throws IOException { DeleteIndexRequest request = new DeleteIndexRequest(INDEX); AcknowledgedResponse acknowledgedResponse = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println(acknowledgedResponse.isAcknowledged()); } // 添加文档 @Test void testAddDocument() throws IOException { User user = new User("张三", 28); IndexRequest request = new IndexRequest(INDEX); // 规则 PUT /index/_doc/1 request.id("1"); request.timeout(TimeValue.timeValueSeconds(1)); // 将数据放入请求 json request.source(JSON.toJSONString(user), XContentType.JSON); IndexResponse response = client.index(request, RequestOptions.DEFAULT); System.out.println(response.toString()); System.out.println(response.status()); } //注意这里要是发现获取返回结果提示警告,拿不到结果,要考虑ES security的设置 // 获取文档 判断是否存在 GET /index/_doc/1 @Test void testIsExists() throws IOException { GetRequest request = new GetRequest(INDEX, "1"); // 不获取返回的 _source 的上下文了 request.fetchSourceContext(new FetchSourceContext(false)); request.storedFields("_none_"); boolean exists = client.exists(request, RequestOptions.DEFAULT); System.out.println(exists); } // 获取文档 /** * 返回结果: * {"age":28,"name":"狂神说"} * {"_index":"xiaofan_test_index","_type":"_doc","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"age":28,"name":"狂神说"}} */ @Test void testGetDocument() throws IOException { GetRequest request = new GetRequest(INDEX, "1"); GetResponse response = client.get(request, RequestOptions.DEFAULT); System.out.println(response.getSourceAsString()); System.out.println(response); } // 更新文档 @Test void testUpdateDocument() throws IOException { UpdateRequest request = new UpdateRequest(INDEX, "1"); request.timeout("1s"); User user = new User("法外狂徒格雷福斯", 18); request.doc(JSON.toJSONString(user), XContentType.JSON); UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT); System.out.println(updateResponse); } // 删除文档 @Test void testDeleteDocument() throws IOException { DeleteRequest request = new DeleteRequest(INDEX, "1"); request.timeout("1s"); DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT); System.out.println(deleteResponse); } // 批量插入数据(修改,删除类似操作) @Test void testBulkRequest() throws IOException { BulkRequest request = new BulkRequest(); request.timeout("10s"); ArrayList users = new ArrayList<>(); users.add(new User("kuangshen1", 21)); users.add(new User("kuangshen2", 22)); users.add(new User("kuangshen3", 23)); users.add(new User("xiaofan1", 18)); users.add(new User("xiaofan2", 19)); // 批处理请求, 修改,删除,只要在这里修改相应的请求就可以 for (int i = 0; i < users.size(); i++) { request.add(new IndexRequest(INDEX) .id(String.valueOf(i + 1)) .source(JSON.toJSONString(users.get(i)), XContentType.JSON)); } BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT); //是否失败,返回false表示成功 System.out.println(bulkResponse.hasFailures()); } // 查询文档 @Test void testSearch() throws IOException { SearchRequest searchRequest = new SearchRequest(INDEX); // 构建搜索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 查询条件, 可以使用QueryBuilders工具类实现 // QueryBuilders.termQuery 精确 // QueryBuilders.matchLLQuery() 匹配所有 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "kuangshen1"); // MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery(); sourceBuilder.query(termQueryBuilder); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(JSON.toJSON(searchResponse.getHits())); System.out.println("======================================"); for (SearchHit documentFields : searchResponse.getHits().getHits()) { System.out.println(documentFields.getSourceAsMap()); } } }
Lebanon Address 版权所有
Powered by WordPress