官方文档 首先我们查看官方文档
https://www.elastic.co/guide/index.html
这里我们选择其他版本。选择7.6
我们一般使用高级的客户端
1 2 3 4 5 <dependency > <groupId > org.elasticsearch.client</groupId > <artifactId > elasticsearch-rest-high-level-client</artifactId > <version > 7.6.2</version > </dependency >
环境搭建 创建一个SpringBoot项目
所以我们要修改版本与我们的对应
编写配置类
1 2 3 4 5 6 7 8 9 10 11 @Configuration public class ElasticSearchClientConfig { @Bean public RestHighLevelClient restHighLevelClient () { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost" , 9200 , "http" ))); return client; } }
索引API 创建索引 CreateIndexRequest request = new CreateIndexRequest("索引名");
client.indices().create(request, RequestOptions.DEFAULT);
create()
创建
1 2 3 4 5 6 7 8 9 10 @Test void testCreateIndex () throws IOException { CreateIndexRequest request = new CreateIndexRequest("kylin_index" ); CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(createIndexResponse); }
获取索引 new GetIndexRequest("索引名");
client.indices().exists(request, RequestOptions.DEFAULT);
exists()
判断是否存在返回boolean
1 2 3 4 5 6 7 @Test void testExistIndex () throws IOException { GetIndexRequest request = new GetIndexRequest("kylin_index" ); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(exists); }
删除索引 new DeleteIndexRequest("索引名");
client.indices().delete(request, RequestOptions.DEFAULT);
delete()
删除索引方法返回一个AcknowledgedResponse对象通过isAcknowledged()
判断是否被删除。
1 2 3 4 5 6 7 @Test void testDeleteIndex () throws IOException { DeleteIndexRequest request = new DeleteIndexRequest("kylin_index" ); AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println(delete.isAcknowledged()); }
文档API 当前所有的索引全都被删除。
创建一个User对象
1 2 3 4 5 6 7 @Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; }
导入fastjson
1 2 3 4 5 <dependency > <groupId > com.alibaba</groupId > <artifactId > fastjson</artifactId > <version > 1.2.62</version > </dependency >
添加文档
XContentType.JSON
表示传送的是Json数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test void testAddDocument () throws IOException { User user = new User("kylin" , 3 ); IndexRequest request = new IndexRequest("kylin_index" ); request.id("1" ); request.timeout("1s" ); request.source(JSON.toJSONString(user), XContentType.JSON); IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT); System.out.println(indexResponse.toString()); System.out.println(indexResponse.status()); }
获取文档 判断该文档是否存在
_source就是下面这个数据,不获取。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Test void testIsExists () throws IOException { GetRequest getRequest = new GetRequest("kylin_index" , "1" ); getRequest.fetchSourceContext(new FetchSourceContext(false )); getRequest.storedFields("_none" ); boolean exists = client.exists(getRequest, RequestOptions.DEFAULT); System.out.println(exists); }
获取文档信息
getSourceAsString()
获取_source中的内容以String类型
更新文档
1 2 3 4 5 6 7 8 9 10 11 12 13 @Test void testUpdateRequest () throws IOException { UpdateRequest updateRequest = new UpdateRequest("kylin_index" , "1" ); updateRequest.timeout("1s" ); User user = new User("Kylin" , 18 ); updateRequest.doc(JSON.toJSONString(user), XContentType.JSON); UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT); System.out.println(updateResponse.status()); }
删除文档
1 2 3 4 5 6 7 8 9 10 @Test void testDeleteRequest () throws IOException { DeleteRequest deleteRequest = new DeleteRequest("kylin_index" , "1" ); deleteRequest.timeout("1s" ); DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT); System.out.println(deleteResponse.status()); }
批量操作 创建 BulkRequest对象BulkRequest bulkRequest = new BulkRequest();
client.bulk(bulkRequest, RequestOptions.DEFAULT);
bulkResponse.hasFailures()
判断是否失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Test void testBulkRequest () throws IOException { BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout("10s" ); ArrayList<User> userList = new ArrayList<>(); userList.add(new User("kylin1" , 3 )); userList.add(new User("kylin2" , 3 )); userList.add(new User("kylin3" , 3 )); userList.add(new User("kylin4" , 3 )); userList.add(new User("kylin5" , 3 )); userList.add(new User("kylin6" , 3 )); userList.add(new User("kylin7" , 3 )); for (int i = 0 ; i < userList.size(); i++) { bulkRequest.add(new IndexRequest("kylin_index" ).id("" + (i + 1 )).source(JSON.toJSONString(userList.get(i)), XContentType.JSON)); } BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT); System.out.println(bulkResponse.hasFailures()); }
其他的获取更新也类似该操作。
查询文档 创建搜索请求new SearchRequest("索引名");
构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
查询条件,我们可以使用QueryBuilders
工具来实现
QueryBuilders.termQuery
精确查询
QueryBuilders.matchAllQuery()
匹配所有
sourceBuilder.query(termQueryBuilder);
添加查询条件
sourceBuilder.highlighter();
构建高亮
搜索请求添加搜索条件searchRequest.source(sourceBuilder);
客户端执行搜索client.search(searchRequest, RequestOptions.DEFAULT);
searchResponse.getHits().getHits()
获取hits
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @Test void testSearch () throws IOException { SearchRequest searchRequest = new SearchRequest("kylin_index" ); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.highlighter(); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name" , "kylin1" ); 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.toJSONString(searchResponse.getHits())); System.out.println("=================================" ); for (SearchHit documentFields : searchResponse.getHits().getHits()) { System.out.println(documentFields.getSourceAsMap()); } }