环境:springboot2.3.3.RELEASE
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
一、客户端
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.0.104", 9200, "http")));
// System.out.println(client);
// 关闭客户端连接
client.close();;
二、索引
2.1 索引创建
// 创建索引 - 请求对象
CreateIndexRequest request = new CreateIndexRequest("user2");
// 发送请求
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
boolean acknowledged = response.isAcknowledged();
System.out.println("操作状态 = " + acknowledged);
输出结果:
2.2 索引查询
GetIndexRequest request = new GetIndexRequest("user2");
GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
System.out.println("aliases:" + response.getAliases());
System.out.println("mappings:" + response.getMappings());
System.out.println("settings:" + response.getSettings());
输出结果:
2.3 索引删除
DeleteIndexRequest request = new DeleteIndexRequest("user2");
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println("操作结果:" + response.isAcknowledged());
输出结果:
三、文档
3.1 文档创建
IndexRequest request = new IndexRequest("user");
// 索引文档的ID
request.id("1001");
User user = new User("zhangsan", 20, "男");
// 数据放入请求中
request.source(JSONUtil.toJsonStr(user), XContentType.JSON);
// 发送请求
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
System.out.println("创建文档: " + index);
输出结果:
3.2 文档修改
UpdateRequest request = new UpdateRequest();
request.index("user").id("1001");
request.doc(XContentType.JSON, "sex", "女");
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("修改文档:" + response);
3.3 文档查询
GetRequest request = new GetRequest().index("user").id("1001");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println("查询文档:" + response);
输出结果:
3.4 文档删除
DeleteRequest request = new DeleteRequest("user");
request.id("1001");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println("删除文档:" + response.toString());
输出结果:
3.5 批量创建
// 创建批量新增对象
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest().index("user").id("1001").source(JSONUtil.toJsonStr(new User("zhangsan", 20, "男")), XContentType.JSON));
bulkRequest.add(new IndexRequest().index("user").id("1002").source(JSONUtil.toJsonStr(new User("lisi", 18, "女")), XContentType.JSON));
BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("批量新增:" + responses);
输出结果:
3.6 批量删除
// 创建批量新增对象
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new DeleteRequest().index("user").id("1001"));
bulkRequest.add(new DeleteRequest().index("user").id("1002"));
BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("批量删除:" + responses);
输出结果:
3.7 全量查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.8 条件查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("name", "zhangsan"));
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.9 分页查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.from(0);
sourceBuilder.size(1);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.10 排序查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.sort("age", SortOrder.ASC);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.11 组合查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 必须包含
boolQueryBuilder.must(QueryBuilders.matchQuery("age", "20"));
// 一定不含
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("name", "lisi"));
// 可能包含
boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "男"));
sourceBuilder.query(boolQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
3.12 范围查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
// 小于等于30
rangeQueryBuilder.lte(30);
sourceBuilder.query(rangeQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.13 模糊查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("name", "lisi");
// 左右模糊查询
fuzzyQueryBuilder.fuzziness(Fuzziness.ONE);
sourceBuilder.query(fuzzyQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
}
输出结果:
3.14 高亮查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "lisi");
sourceBuilder.query(termsQueryBuilder);
// 构建高亮字段
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<font color='red'>");//设置标签前缀
highlightBuilder.postTags("</font>");//设置标签后缀
highlightBuilder.field("name");//设置高亮字段
//设置高亮构建对象
sourceBuilder.highlighter(highlightBuilder);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println("查到的数据:" + hit.getSourceAsString());
//打印高亮结果
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
System.out.println(highlightFields);
}
3.15 最大值查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.aggregation((AggregationBuilders.max("maxAge").field("age")));
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println("查到的数据:" + response);
输出结果:
3.16 分组查询
// 创建搜索请求对象
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.aggregation((AggregationBuilders.terms("age_groupby").field("age")));
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println("查到的数据:" + response);
输出结果:
总体来说,还是比较简单的。只是针对一些基础的API做了测试。
版权声明:本文为RX_780原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。