我正在嘗試使用以下代碼從 ES 的特定索引中洗掉所有檔案:
@Autowired
protected ElasticsearchOperations elasticsearchOperations;
@BeforeEach
void beforeEach() {
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
elasticsearchOperations.delete(query, elasticsearchOperations.getIndexCoordinatesFor(ReviewRequestDocument.class));
}
失敗了
java.lang.IllegalArgumentException: id must not be null
我很困惑,因為類似的方法適用于計算索引中的檔案:
private long countReviewRequestDocuments() {
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
return elasticsearchOperations.count(query, ReviewRequestDocument.class);
}
所以我的問題是從索引中洗掉所有檔案的正確方法是什么?
uj5u.com熱心網友回復:
我找到了解決方案:
@BeforeEach
void beforeEach() {
IndexCoordinates coordinates = elasticsearchOperations.getIndexCoordinatesFor(ReviewRequestDocument.class);
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
String[] ids = elasticsearchOperations.search(query, ReviewRequestDocument.class, coordinates)
.stream()
.map(SearchHit::getId)
.toArray(String[]::new);
Query idsQuery = new NativeSearchQueryBuilder().withQuery(idsQuery().addIds(ids)).build();
elasticsearchOperations.delete(idsQuery, ReviewRequestDocument.class, coordinates);
assertThat(countReviewRequestDocuments()).isZero();
}
看起來 ES 不允許批量洗掉索引中的所有檔案,所以解決方案是獲取 id,然后將它們傳遞給洗掉查詢。
uj5u.com熱心網友回復:
從索引中洗掉所有檔案在 Elasticsearch 中效率極低,并且不是解決此問題的方法
你最好洗掉索引然后從代碼中重新創建它
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428936.html
下一篇:在JHipster中啟用Elasticsearch導致UnsatisfiedDependencyException:Errorcreatedbeanwithname'userService&
