如何将 Scroll API 与 ReactiveElasticsearchClient 一起使用
How to use the Scroll API with the ReactiveElasticsearchClient
我是响应式编程的新手,我正在尝试切换到 ReactiveElasticsearchClient
。
现在旧代码使用 RestHighLevelClient
并使用 do-while 循环进行滚动搜索,如下所示:
SearchRequest searchRequest = searchRequest(indexName)
.source(searchSource()
.query(QueryBuilders.matchAllQuery())
.fetchSource(true)
.sort("id", SortOrder.ASC)
.size(1000))
.scroll(TimeValue.timeValueSeconds(60L));
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchHits = searchResponse.getHits();
String scrollId = searchResponse.getScrollId();
do {
/*
* work with the search hits and
* and do some logic here
*
* */
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId).scroll(TimeValue.timeValueSeconds(60));
try {
searchResponse = restHighLevelClient.scroll(scrollRequest, RequestOptions.DEFAULT);
searchHits = searchResponse.getHits();
scrollId = searchResponse.getScrollId();
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
} while (searchHits.getHits().length > 0);
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
如何使用 ReactiveElasticsearchClient
在反应管道中执行相同的操作? RestHighLevelClient
使用的某些 类 不适用于反应式客户端。
使用
Flux<SearchHit> ReactiveElasticsearchClient.scroll(SearchRequest request)
此方法在后台使用滚动条 API 执行给定的查询。 ReactiveElasticsearchClient
在内部维护滚动 ID 并从 Elasticsearch 获取下一个 批次 数据,因为该方法的调用者使用返回的 Flux<SearchHit>
直到获取所有数据。
至于RestHighLevelClient
和ReactiveElasticsearchClient
使用的类:
它使用的 RestHighLevelClient
和 类 来自 Elasticsearch 库(rest-highlevel-client 和 Elasticsearch 核心)。 Spring 数据 Elasticsearch 使用 RestHighLevelClient
访问 Elasticsearch。当您直接使用 RestHighLevelClient
时,您使用的不是 Spring Data Elasticsearch,而是普通的 Elasticsearch 代码。
ReactiveElasticsearchClient
由 Spring Data Elasticsearch 提供,而不是由 Elasticsearch 提供。它也使用 类 来自 Elasticsearch 库的输入和输出,但也使用来自 Spring Data Elasticsearch 或 Spring Framework 的 类。它的目的是使用 Spring Data Elasticsearch 启用对 Elasticsearch 的反应式访问。它是
函数不是 RestHighLevelClient
的反应式副本,而是实现反应式访问所需的功能。所以你不会在 ReactiveElasticsearchClient
中为 RestHighLevelClient
.
的每个函数找到对应的函数
我是响应式编程的新手,我正在尝试切换到 ReactiveElasticsearchClient
。
现在旧代码使用 RestHighLevelClient
并使用 do-while 循环进行滚动搜索,如下所示:
SearchRequest searchRequest = searchRequest(indexName)
.source(searchSource()
.query(QueryBuilders.matchAllQuery())
.fetchSource(true)
.sort("id", SortOrder.ASC)
.size(1000))
.scroll(TimeValue.timeValueSeconds(60L));
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchHits = searchResponse.getHits();
String scrollId = searchResponse.getScrollId();
do {
/*
* work with the search hits and
* and do some logic here
*
* */
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId).scroll(TimeValue.timeValueSeconds(60));
try {
searchResponse = restHighLevelClient.scroll(scrollRequest, RequestOptions.DEFAULT);
searchHits = searchResponse.getHits();
scrollId = searchResponse.getScrollId();
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
} while (searchHits.getHits().length > 0);
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
如何使用 ReactiveElasticsearchClient
在反应管道中执行相同的操作? RestHighLevelClient
使用的某些 类 不适用于反应式客户端。
使用
Flux<SearchHit> ReactiveElasticsearchClient.scroll(SearchRequest request)
此方法在后台使用滚动条 API 执行给定的查询。 ReactiveElasticsearchClient
在内部维护滚动 ID 并从 Elasticsearch 获取下一个 批次 数据,因为该方法的调用者使用返回的 Flux<SearchHit>
直到获取所有数据。
至于RestHighLevelClient
和ReactiveElasticsearchClient
使用的类:
它使用的 RestHighLevelClient
和 类 来自 Elasticsearch 库(rest-highlevel-client 和 Elasticsearch 核心)。 Spring 数据 Elasticsearch 使用 RestHighLevelClient
访问 Elasticsearch。当您直接使用 RestHighLevelClient
时,您使用的不是 Spring Data Elasticsearch,而是普通的 Elasticsearch 代码。
ReactiveElasticsearchClient
由 Spring Data Elasticsearch 提供,而不是由 Elasticsearch 提供。它也使用 类 来自 Elasticsearch 库的输入和输出,但也使用来自 Spring Data Elasticsearch 或 Spring Framework 的 类。它的目的是使用 Spring Data Elasticsearch 启用对 Elasticsearch 的反应式访问。它是
函数不是 RestHighLevelClient
的反应式副本,而是实现反应式访问所需的功能。所以你不会在 ReactiveElasticsearchClient
中为 RestHighLevelClient
.