elasticsearchresttemplate 用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ElasticsearchRestTemplate 用法详解
什么是 ElasticsearchRestTemplate
ElasticsearchRestTemplate 是 Spring Data Elasticsearch 提供的一个Elasticsearch 客户端的封装工具。
它主要用于与 Elasticsearch 进行交互,以执行索引、搜索和删除等操作。
通过使用 ElasticsearchRestTemplate,我们可以在 Spring Boot 项目中很方便地集成 Elasticsearch,并简化与 Elasticsearch 的交互。
在使用 ElasticsearchRestTemplate 之前,我们需要先配置 Elasticsearch 的连接信息。
我们可以在 application.properties(或 application.yml)文件中配置 Elasticsearch 的主机地址、端口和索引名称等信息。
然后,在 Spring Boot 项目中添加 Elasticsearch 的依赖,就可以开始使用ElasticsearchRestTemplate 了。
ElasticsearchRestTemplate 的用法
创建 ElasticsearchRestTemplate 对象
在开始使用 ElasticsearchRestTemplate 前,我们首先需要创建一个ElasticsearchRestTemplate 对象。
可以通过注入 ElasticsearchOperations 对象或者直接创建 ElasticsearchRestTemplate 对象来完成此操作。
@Autowired
private ElasticsearchOperations elasticsearchOperations;
ElasticsearchRestTemplate elasticsearchRestTemplate = elasticsearchOperations. elasticsearchRestTemplate();
或者
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
ElasticsearchRestTemplate 提供了一系列方法来执行索引操作,包括创建索引、更新索引、删除索引以及判断索引是否存在等。
创建索引
IndexCoordinates indexCoordinates = IndexCoordinates.of("index_name");
IndexQuery indexQuery = new IndexQueryBuilder()
.withId("document_id")
.withObject(new MyDocument("title"))
.build();
elasticsearchRestTemplate.index(indexQuery, indexCoordinates);
上述代码示例中,我们使用了withId指定了要创建的文档的唯一标识符(这里假设为"document_id")。
我们也可以省略withId,让 Elasticsearch 自动生成唯一标识符。
更新索引
UpdateQuery updateQuery = UpdateQuery.builder("document_id")
.withDoctype("document_type")
.withUpdateRequest(updateRequest)
.build();
elasticsearchRestTemplate.update(updateQuery, indexCoordinates);
上述代码示例中,updateRequest是一个 Elasticsearch 提供的更新请求对象,我们可以设置要更新的字段和数值。
withDoctype方法用于指定文档类型。
删除索引
elasticsearchRestTemplate.delete("document_id", indexCoordinates);
上述代码示例中,我们使用了delete方法来删除指定标识符的文档。
判断索引是否存在
if (!elasticsearchRestTemplate.indexExists(indexCoordinates)) { // 索引不存在的处理逻辑
}
上述代码示例中,我们使用了indexExists方法判断指定索引是否存在。
ElasticsearchRestTemplate 也提供了一系列方法用于执行搜索操作,包括匹配查询、范围查询、多条件查询、分页和排序等。
匹配查询
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
SearchQueryBuilders.matchQuery("title", "keyword").build(),
MyDocument.class,
indexCoordinates
);
上述代码示例中,我们使用了matchQuery方法创建了一个匹配查询,指定了要匹配的字段title和关键词keyword。
范围查询
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
SearchQueryBuilders.rangeQuery("timestamp")
.gte(startTime)
.lte(endTime)
.build(),
MyDocument.class,
indexCoordinates
);
上述代码示例中,我们使用了rangeQuery方法创建了一个范围查询,指定了要查询的字段timestamp,以及查询的起始时间和结束时间。
多条件查询
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("field1", value1))
.must(QueryBuilders.termQuery("field2", value2))
.mustNot(QueryBuilders.termQuery("field3", value3))
)
.build();
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
searchQuery, MyDocument.class, indexCoordinates
);
上述代码示例中,我们使用了boolQuery创建了一个多条件查询,其中must表示必须满足的条件,mustNot表示不能满足的条件。
分页和排序
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("title", "keyword"))
.withPageable(PageRequest.of(pageNumber, pageSize))
.withSort(Sort.by(Sort.Direction.DESC, "timestamp"))
.build();
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
searchQuery, MyDocument.class, indexCoordinates
);
上述代码示例中,我们使用了withPageable方法指定分页相关的参数,withSort 方法指定排序的字段和方向。
聚合操作
ElasticsearchRestTemplate 还支持聚合操作,用于从数据中提取统计信息、分组等。
Aggregation aggregation = AggregationBuilders
.terms("termAggregation")
.field("field")
.build();
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.addAggregation(aggregation)
.build();
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
searchQuery, MyDocument.class, indexCoordinates
);
Aggregations aggregations = searchHits.getAggregations();
Terms terms = aggregations.get("termAggregation");
上述代码示例中,我们使用了terms方法创建了一个聚合操作,指定了要聚合的字段field。
addAggregation方法将聚合操作添加到查询中。
高亮显示
ElasticsearchRestTemplate 还支持高亮显示,用于标记搜索结果中匹配的关键词。
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("title", "keyword"))
.withHighlightFields(new HighlightBuilder.Field("title"))
.build();
SearchHits<MyDocument> searchHits = elasticsearchRestTemplate.search(
searchQuery, MyDocument.class, indexCoordinates
);
for (SearchHit<MyDocument> searchHit : searchHits) {
HighlightEntry.Highlight highlight = searchHit.getHighlightFields().get("t itle");
String highlightedTitle = highlight.getHighlights().get(0);
}
上述代码示例中,我们使用withHighlightFields方法指定了要高亮显示的字段title。
在搜索结果中,可以通过getHighlightFields方法获取高亮字段的结果。
总结
通过本文的介绍,我们详细了解了 ElasticsearchRestTemplate 的用法。
我们可
以使用它来执行索引的创建、更新和删除操作,执行搜索操作,并支持聚合、分页、排序和高亮显示等功能。
ElasticsearchRestTemplate 是一个非常方便的Elasticsearch 客户端工具,使得我们可以在 Spring Boot 项目中轻松地与Elasticsearch 进行交互。