簡體   English   中英

Elasticsearch 1.5 curl刪除而無需queryapi

[英]Elasticsearch 1.5 curl delete without queryapi

在我的elasticsearch 1.4上,我曾經使用DeleteByQuery API刪除文檔,如下所示:

curl -XDELETE http://my_elasticsearch:9200/_all/_query?q=some_field:some_value

這不是完美的(由於常規的OutOfMemoryError),但這足以滿足我的需求(此時)。

但是現在我使用了新的elasticsearch 1.5,並且在文檔中我已經讀到:

在1.5.0中已棄用。

“按查詢刪除將在2.0版中刪除:這是有問題的,因為它無提示地強制刷新,刷新可能會在並發索引期間迅速導致OutOfMemoryError,還會導致主數據庫和副本數據庫變得不一致。相反,請使用滾動/掃描API查找所有匹配的ID,然后發出批量請求將其刪除。

因此,我想使用滾動/掃描API進行相同的操作。 但是如何使用這個刪除呢? 我不明白 對我來說, 文檔API文檔Java API似乎並不完整(缺少刪除示例)。

PS:我正在尋找Java或curl的理解(無論對我而言,最終我都需要這兩者)。

我也遇到了這個問題,找不到合適的代碼示例。 我會告訴你我的想法。 我不確定這是否是最好的方法,所以請隨時評論如何改進。 請注意,我將查詢結果的大小設置為Integer.MAX_VALUE,以便查詢將返回所有(或盡可能多)需要刪除的結果。

  1. 運行查詢以獲取所有要刪除的ID
  2. 將所有ID的刪除請求添加到批量請求中
  3. 運行批量請求
  4. 重新運行查詢以查看是否需要刪除更多記錄
  5. 必要時重復

     private void deleteAllByQuery(final String index, final String type, final QueryBuilder query) { SearchResponse response = elasticSearchClient.prepareSearch(index) .setTypes(type) .setQuery(query) .setSize(Integer.MAX_VALUE) .execute().actionGet(); SearchHit[] searchHits = response.getHits().getHits(); while (searchHits.length > 0) { LOGGER.debug("Need to delete " + searchHits.length + " records"); // Create bulk request final BulkRequestBuilder bulkRequest = elasticSearchClient.prepareBulk().setRefresh(true); // Add search results to bulk request for (final SearchHit searchHit : searchHits) { final DeleteRequest deleteRequest = new DeleteRequest(index, type, searchHit.getId()); bulkRequest.add(deleteRequest); } // Run bulk request final BulkResponse bulkResponse = bulkRequest.execute().actionGet(); if (bulkResponse.hasFailures()) { LOGGER.error(bulkResponse.buildFailureMessage()); } // After deleting, we should check for more records response = elasticSearchClient.prepareSearch(index) .setTypes(type) .setQuery(query) .setSize(Integer.MAX_VALUE) .execute().actionGet(); searchHits = response.getHits().getHits(); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM