2013-09-25 65 views
19

我想刪除Elasticsearch一個類型中索引的所有文件,使用HTTP/REST API,但我不希望刪除的映射關係對這種類型的刪除類型的文檔Elasticsearch

我怎樣才能在URL中構建查詢來執行此操作?

回答

16

之前執行的命令,指數/製圖州; (從elasticsearch頭部插件 web界面截取的屏幕截圖)

enter image description here

enter image description here

enter image description here

命令;

curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d ' 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match_all": {} 
     } 
     ] 
    } 
    } 
} 
' 

結果;

enter image description here

執行命令後,索引/映射狀態;

enter image description here

enter image description here

enter image description here

正如我們可以看到,我們刪除,而不刪除索引或類型(映射)一個類型(映射)中收錄的所有文件。

+0

這不起作用 – localhost

+0

'twitter'是索引名稱,'tweet'是映射命令中的名稱。你是否正確地將它們替換爲你的案件? – csonuryilmaz

+0

當然。我認爲這取決於elasticsearch版本。我也有一些來自elasticsearch指南的疑問,並得到一個不可解除的例外。 – localhost

7

一個簡單的通過帶有match_all查詢的查詢應該可以做到這一點。 你可以在這裏攫取更多的信息:

delete by query api

或者,您可以刪除整個類型和使用模板的API。只要將一個文件放入包含模板的config/templates /文件夾中,就不會鬆動它。當您刪除映射時,映射確實會丟失,但只要您重新編制索引,模板就會重新使用。這裏的一些信息:

template api

編輯:新的刪除API:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

+2

似乎棄用 – Tjorriemorrie

+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html –

-3

使用:

curl -XDELETE 'http://{server}/{index_name}/{type_name}/' 

(如documentation

+0

雖然這似乎工作,它不是delete_by_query文件的一部分。但是,這也會刪除映射,所以您應該使用完整的delete_by_query和全部匹配查詢。 – rakensi

+4

這會刪除整個文檔類型,而不僅僅是文檔。 – Oliver

4

隨着在elasticsearch頭插件我是能夠刪除從logstash指數logs類型的所有文件,而不刪除映射以下命令:

{"query":{"match_all":{}}} 

Deleting documents with Elasticsearch head plugin

與自由空間的磁盤上您還必須在刪除文檔後優化索引(操作 - >優化頭部插件中的索引logstash)。

0

如果你想這樣做在golang,使用「olviere/elastic」庫,您可以使用此代碼,假設你有一個客戶端yourClient,並yourIndexyourType

bq := elastic.NewBoolQuery() 
    bq.Must(elastic.NewMatchAllQuery()) 
    _, err := elastic.NewDeleteByQueryService(yourClient). 
     Index(yourIndex). 
     Type(yourType). 
     Query(bq). 
     Do() 
0
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy' 

$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{ 
    "query" : { 
     "term" : { "user" : "kimchy" } 
    } 
} 
1

以前的答案將不適用於最新版本的Elasticsearch。 「通過查詢刪除」已從Elasticsearch 2.0棄用。 Elasticsearch文檔說它在併發索引期間會導致OutOfMemoryError,並可能導致主副本變得不一致。如果您想在Github之後追蹤問題的歷史記錄。

它現在需要多個步驟才能從type中刪除所有文檔。

  1. 查找您需要刪除的文檔的所有id。執行此操作的最有效方法是使用scroll/scan API查找給定類型的所有匹配ID。

  2. 發出批量請求以通過ID刪除文檔。下面提供了一個例子。

    curl -XPOST 'http://localhost:9200/_bulk' -d ' 
        { "delete": { "_index": "index", "_type": "type", "_id": "1"} 
        { "delete": { "_index": "index", "_type": "type", "_id": "2"}' 
    

請注意,如果你提供一個文本文件輸入捲曲,你必須使用--data-binary標誌而非純-d

相關問題