2013-09-25 30 views
19

chcę usunąć wszystkie dokumenty indeksowane w ramach typu w Elasticsearch, używając API HTTP/odpoczynek, ale nie chcę, aby usunąć mapowanie dla tego typuUsuń dokumenty typu w Elasticsearch

Jak mogę zbudować zapytanie w adresie URL, aby to zrobić?

Odpowiedz

16

Przed polecenie wykonywania, index/mapowanie stan; (Zrzuty ekranu pochodzi elasticsearch wtyczki głowica interfejsu internetowej)

enter image description here

enter image description here

enter image description here

polecenia;

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

Wynik;

enter image description here

Po polecenie wykonania, wskaźnik stanu/odwzorowywania;

enter image description here

enter image description here

enter image description here

Jak widzimy my usunięte wszystkie dokumenty indeksowane w ramach typu (mapowanie) bez usuwania indeksu lub typu (mapowanie).

+0

to nie działa – localhost

+0

"twitter" to nazwa indeksu, a "tweet" to nazwa odwzorowania w poleceniu. Czy zastąpiłeś je poprawnie swoją walizką? – csonuryilmaz

+0

pewnie. Myślę, że to zależy od wersji elasticsearch. Mam również kilka zapytań z przewodnika elasticsearch i otrzymuję nieprzydatny wyjątek. – localhost

7

Proste usunięcie przez zapytanie z zapytaniem match_all powinno wystarczyć. Można złapać więcej informacji tutaj:

delete by query api

Alternatywnie, można usunąć cały rodzaj i skorzystać z API szablonów. Po prostu upuść plik w folderze config/templates/zawierającym twój szablon i nigdy go nie stracisz. Mapowanie rzeczywiście zostanie utracone, gdy usuniesz mapowanie, ale szablon zostanie ponownie wykorzystany, gdy tylko coś zindeksujesz. Oto kilka informacji:

template api

EDIT: nowa kasowania api: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

+2

Wydaje się, że jest przestarzała – Tjorriemorrie

+0

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

-3

zastosowanie:

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

(jak w documentation)

+0

Mimo to wydaje się działać, to nie jest częścią dokumentacji delete_by_query. Jednak to również usuwa odwzorowanie, więc powinieneś użyć pełnego delete_by_query, z zapytaniem typu match-all. – rakensi

+4

Powoduje usunięcie całego typu dokumentu, a nie tylko dokumentów. – Oliver

4

z następującym poleceniem w wtyczce głowicy elasticsearch udało mi się usunąć wszystkie dokumenty typu logs z indeksu logstash bez kasowania odwzorowania:

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

Deleting documents with Elasticsearch head plugin

Do wolnego miejsca na dysku należy również zoptymalizować indeks (Akcje-> Optymalizacja dla indeksu logstash w wtyczce głównej) po usunięciu dokumentów.

0

Jeśli chcesz to zrobić w golang, przy użyciu "olviere/elastic" bibliotekę, można użyć tego kodu, zakładając, że masz klienta yourClient i yourIndex i yourType:

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

poprzednich odpowiedzi nie będzie działać z najnowszą wersją Elasticsearch. "Usuń według zapytania" zostało wycofane z wersji Elasticsearch 2.0. Elasticsearch Dokumentacja mówi, że może spowodować OutOfMemoryError podczas współbieżnego indeksowania i może spowodować, że podstawowa i replika staną się niespójne. Jeśli chcesz śledzić historię problemu w Github.

Wykonuje teraz wiele kroków w celu usunięcia wszystkich dokumentów z type.

  1. Znajdź wszystkie identyfikatory dokumentów, które należy usunąć. Najbardziej skutecznym sposobem wykonania tej operacji jest użycie scroll/scan API, aby znaleźć wszystkie pasujące identyfikatory dla danego typu.

  2. Wydaje zbiorczy wniosek o usunięcie dokumentów według identyfikatorów. Przykład podany poniżej.

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

Zauważ, że jeśli zapewniając wejście plik tekstowy do zwijania, ty musi użyć flagi --data-binary zamiast zwykłego -d.