如何刪除彈性搜索數據庫中的數據而不刪除索引映射?在不刪除映射的情況下刪除Elasticsearch索引
我是輪胎寶石,使用delete命令刪除所有映射並再次運行create命令。我想避免一次又一次運行create命令。
請幫我解決這個問題。
如何刪除彈性搜索數據庫中的數據而不刪除索引映射?在不刪除映射的情況下刪除Elasticsearch索引
我是輪胎寶石,使用delete命令刪除所有映射並再次運行create命令。我想避免一次又一次運行create命令。
請幫我解決這個問題。
由於ElasticSearch刪除文檔的方式(通過用bitset標記文檔以刪除文檔),通過遍歷X個文檔並將其標記爲刪除將不值得。我相信當你刷新索引時,它將通過刪除標記爲刪除位集的所有文檔來釋放內存,這是一項昂貴的操作,並會減慢索引所在的碎片。
希望這有助於。
您可以使用index templates,它將應用於名稱與模式匹配的索引。
通過這種方式,您可以簡單地使用delete index api(比刪除其中的所有文檔更好)來刪除索引,並且當您重新創建相同的索引時,將匹配的索引模板應用於該索引,以便您不需要需要重新創建它的映射,設置,加熱器以及...
會發生什麼是映射將被刪除,因爲它們引用您刪除的索引,但因爲它們存儲在索引模板中稍後重新創建相同的索引時,不需要重新提交它們。
發現它在http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
DELETE <index>/_query
{
"query" : {
"match_all": {}
}
}
你也可以通過改變它刪除特定類型DELETE <index>/<type>/_query
這將刪除數據,並保持映射,設置等
按查詢刪除已在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" } }
'
更新基於Yehosef的回答最新docs( 6.2作爲這篇文章):
POST <index>/_delete_by_query
{
"query" : {
"match_all": {}
}
}
我不認爲這是可能的,因爲你使用ElasticS尋找可以節省數百萬甚至數十億條記錄並將其編入索引。所以,當你保存你的文件時,你爲什麼需要刪除它們並重新索引它們?你所說的只適用於保持刪除整個索引並再次創建小索引數據的情況。而@HüseyinBABAL表示,這是重要的數據,而不是映射。 –
爲什麼你想要保持數據映射?這種情況下保留索引數據的重要部分。您可以輕鬆地再次創建映射 –
我對保留索引數據沒有興趣,但我希望數據在相同的映射格式下編入索引。 –