2014-01-22 99 views
2

如何刪除彈性搜索數據庫中的數據而不刪除索引映射?在不刪除映射的情況下刪除Elasticsearch索引

我是輪胎寶石,使用delete命令刪除所有映射並再次運行create命令。我想避免一次又一次運行create命令。

請幫我解決這個問題。

+1

我不認爲這是可能的,因爲你使用ElasticS尋找可以節省數百萬甚至數十億條記錄並將其編入索引。所以,當你保存你的文件時,你爲什麼需要刪除它們並重新索引它們?你所說的只適用於保持刪除整個索引並再次創建小索引數據的情況。而@HüseyinBABAL表示,這是重要的數據,而不是映射。 –

+1

爲什麼你想要保持數據映射?這種情況下保留索引數據的重要部分。您可以輕鬆地再次創建映射 –

+0

我對保留索引數據沒有興趣,但我希望數據在相同的映射格式下編入索引。 –

回答

0

由於ElasticSearch刪除文檔的方式(通過用bitset標記文檔以刪除文檔),通過遍歷X個文檔並將其標記爲刪除將不值得。我相信當你刷新索引時,它將通過刪除標記爲刪除位集的所有文檔來釋放內存,這是一項昂貴的操作,並會減慢索引所在的碎片。

希望這有助於。

1

您可以使用index templates,它將應用於名稱與模式匹配的索引。

通過這種方式,您可以簡單地使用delete index api(比刪除其中的所有文檔更好)來刪除索引,並且當您重新創建相同的索引時,將匹配的索引模板應用於該索引,以便您不需要需要重新創建它的映射,設置,加熱器以及...

會發生什麼是映射將被刪除,因爲它們引用您刪除的索引,但因爲它們存儲在索引模板中稍後重新創建相同的索引時,不需要重新提交它們。

4

發現它在http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

DELETE <index>/_query 
{ 
    "query" : { 
    "match_all": {} 
    } 
} 

你也可以通過改變它刪除特定類型DELETE <index>/<type>/_query

這將刪除數據,並保持映射,設置等

+0

需要注意的是,這在Elasticsearch 1.5.3中已經被棄用,並且將在2.0中被刪除。 – mnd

+0

它被移動到一個插件 - https://www.elastic.co/blog/core-delete-by-query-is-a-plugin - 它在內部使用滾動/掃描API,所以它應該更安全。 – Yehosef

1

按查詢刪除已在1.5.3中棄用

您應該使用滾動/掃描API來查找所有匹配的ID然後發出批量請求刪除它們。

如記錄here

curl -XGET 'localhost:9200/realestate/houses/_search?scroll=1m' -d ' 
{ 
    "query": { 
     "match_all" : { } 
    }, 
    "fields": [] 
} 
' 

,然後批量刪除(不要忘了把新行的最後一行之後)

curl -XPOST 'localhost:9200/_bulk' -d ' 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "1" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "2" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "3" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "4" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "5" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "6" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "7" } } 
{ "delete" : { "_index" : "realestate", "_type" : "houses", "_id" : "8" } } 
' 
0

更新基於Yehosef的回答最新docs( 6.2作爲這篇文章):

POST <index>/_delete_by_query 
{ 
    "query" : { 
    "match_all": {} 
    } 
} 
相關問題