【发布时间】:2021-11-24 19:40:52
【问题描述】:
我是响应式编程的新手,我正在尝试切换到 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 使用的某些类不适用于响应式客户端。
【问题讨论】:
标签: elasticsearch reactive-programming project-reactor spring-data-elasticsearch