我正在执行扫描/滚动以重新映射群集中的索引(v2.4.3),并且我无法理解结果。在head plugin中,我的原始索引具有以下大小/ doc count:
尺寸:1.74Gi(3.49Gi)
docs:708,108(1,416,216)
如果我对此索引执行_reindex命令,我会得到一个具有相同文档数和相同大小的新索引。
但是如果我执行扫描/滚动来复制索引,我最终会在我的新索引中添加更多记录。我现在正处于流程的中间,这是新索引的当前状态:
尺寸:1.81Gi(3.61Gi)
docs:6,492,180(12,981,180)
为什么新索引中的文档与旧索引中的文档数量相比更多?映射文件声明了13个嵌套对象,但我没有更改两个索引之间嵌套对象的数量。
这是我的扫描/滚动代码:
SearchResponse response = client.prepareSearch("nas")
.addSort(SortParseElement.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(120000))
.setQuery(matchAllQuery())
.setSize(pageable.getPageSize()).execute().actionGet();
while (true) {
if (response.getHits().getHits().length <= 0) break; //break out of the loop if failed
long startTime = System.currentTimeMillis();
List<IndexQuery> indexQueries = new ArrayList<>();
Arrays.stream(response.getHits().getHits()).forEach(hit -> {
NasProduct nasProduct = null;
try {
nasProduct = objectMapper.readValue(hit.getSourceAsString(), NasProduct.class);
} catch (IOException e) {
logger.error("Problem parsing nasProductJson json: || " + hit.getSourceAsString() + " ||", e);
}
if (nasProduct != null) {
IndexQuery indexQuery = new IndexQueryBuilder()
.withObject(nasProduct)
.withId(nasProduct.getProductKey())
.withIndexName(name)
.withType("product")
.build();
indexQueries.add(indexQuery);
}
});
elasticsearchTemplate.bulkIndex(indexQueries);
logger.info("Index updated update count: " + indexQueries.size() + " duration: " + (System.currentTimeMillis() - startTime) + " ms");
response = client.prepareSearchScroll(response.getScrollId())
.setScroll(new TimeValue(120000))
.execute().actionGet();
}