Usuwanie danych z ElasticSearch

361

Jestem nowy w ElasticSearch . Próbuję wymyślić, jak usunąć dane z ElasticSearch. Usunąłem swoje indeksy. Wydaje się jednak, że to nie usuwa samych danych. Inne rzeczy, które widziałem, wskazują na funkcję Usuń według zapytania . Jednak nie jestem nawet pewien, o co zapytać. Znam swoje indeksy. Zasadniczo chciałbym dowiedzieć się, jak to zrobić

DELETE FROM [Index]

Od PostMan w Chrome. Nie mam jednak szczęścia. Wygląda na to, że bez względu na to, co robię, dane się zawieszają. Do tej pory z powodzeniem usunąłem indeksy, używając komendy DELETE HTTP w PostMan i używając adresu URL takiego jak:

   http://localhost:9200/[indexName]

Wydaje się jednak, że nie usuwają one samych danych (czyli dokumentów).

użytkownik687554
źródło
Sprawdzam to z listonoszem i otrzymałem odpowiedź jako „{” Podziękowanie: prawda} „Jeśli zobaczysz tę potwierdzoną odpowiedź, nie martw się. Indeks jest usuwany z gumki.
bijayk

Odpowiedzi:

428

Możesz usunąć za pomocą cURLlub wizualnie jednego z wielu narzędzi, które entuzjaści otwartego oprogramowania stworzyli dla Elasticsearch.

Korzystanie z cURL

curl -XDELETE localhost:9200/index/type/documentID

na przykład

curl -XDELETE localhost:9200/shop/product/1

Następnie otrzymasz odpowiedź, czy to się udało, czy nie. Możesz również usunąć cały indeks lub typy za pomocą indeksu, możesz także usunąć typ, pomijając identyfikator dokumentu w ten sposób -

curl -XDELETE localhost:9200/shop/product

Jeśli chcesz usunąć indeks -

curl -XDELETE localhost:9200/shop

Jeśli chcesz usunąć więcej niż jeden indeks zgodny z pewną konwencją nazewnictwa (zwróć uwagę na *symbol wieloznaczny), -

curl -XDELETE localhost:9200/.mar* 

Naocznie

Istnieją różne narzędzia, jak wspomniano powyżej, nie wymienię ich tutaj, ale połączę cię z jednym, który umożliwia natychmiastowe rozpoczęcie pracy, znajdującym się tutaj . To narzędzie nazywa się KOPF. Aby połączyć się z hostem, kliknij logo w lewym górnym rogu i wprowadź adres URL klastra.

Po połączeniu będziesz mógł administrować całym klastrem, usuwać, optymalizować i dostrajać swój klaster.

Opster Elasticsearch - Nathan
źródło
czy mogę w jakikolwiek sposób usunąć 3 dokumenty, o których wiem.
HIRA THAKUR,
@JayeshJain, zgodnie z moją obecną wiedzą, nie. Możesz umieścić 3 zmodyfikowane komendy curl -XDELETE w skrypcie bash i wykonać lub uruchomić 3 jedna po drugiej.
Opster Elasticsearch - Nathan
@JayeshJain so curl -XDELETE localhost: 9200 / index / type / docid1 // curl -XDELETE localhost: 9200 / index / type / docid2 // curl -XDELETE localhost: 9200 / index / type / docid3
Opster Elasticsearch - Nathan
zrobiłem to w ten sam sposób. ale myślałem tylko, czy istnieje mądrzejszy sposób usuwania wielu dokumentów. Przydałby mi się termin, gdybym znał tę dziedzinę. Ale w tym scenariuszu wystarczy usunąć dokumenty według ich identyfikatora. Thx jakikolwiek
HIRA thakur
2
Jak mogę usunąć indeks z niepoprawnym znakiem, np. Logstash-eu -% {customer} -2016.11.22. Chcę usunąć WSZYSTKIE indeksy logstash-eu -% {customer} - * lub logstash-eu -% *
Chris F
459

Jeśli kiedykolwiek będziesz musiał usunąć wszystkie indeksy, może się to przydać:

curl -X DELETE 'http://localhost:9200/_all'

PowerShell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all
kha
źródło
20
jest to bardzo przydatne przy programowaniu i konieczności resetowania do zera (pustej) bazy danych. Dzięki!!
Artistan
3
w swoim bash_profile utwórz alias dla tego polecenia, które przyda się podczas programowania.
user805981
2
„Wyrażenia wieloznaczne lub wszystkie indeksy są niedozwolone”
ZurabWeb,
1
Pamiętaj, że spowoduje to usunięcie wszystkich danych, w tym poświadczeń dostępu do pakietu x-pack.
Gajus
2
To także usuwa pulpity nawigacyjne i wizualizacje Kibana
nano
54

Dokumentacja (lub The Definitive Guide ) mówi, że można również użyć następnego kwerendę, aby usunąć wszystkie indeksy:

curl -XDELETE 'http://localhost:9200/*'

I jest ważna uwaga:

Dla niektórych możliwość usunięcia wszystkich danych za pomocą jednego polecenia jest bardzo przerażającą perspektywą. Jeśli chcesz wyeliminować możliwość przypadkowego masowego usunięcia, możesz ustawić truew swoim elasticsearch.yml:

action.destructive_requires_name: true

Skovorodkin
źródło
30

Musisz wysłać DELETEzapytanie do

http://[your_host]:9200/[your_index_name_here]

Możesz także usunąć pojedynczy dokument:

http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]

Proponuję użyć elastichammera .

Po usunięciu możesz sprawdzić, czy indeks nadal istnieje z następującym adresem URL: http://[your_host]:9200/_stats/

Powodzenia!

Jesper
źródło
jaki jest sposób usuwania indeksów starszych niż 10 dni? Nie mogę korzystać z kuratora, ponieważ mój serwer nie obsługuje.
biolinh
17

Usunięcie indeksu spowoduje usunięcie mapowania i pisanie dalej. możesz usunąć wszystkie wiersze za pomocą następującego zapytania

curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
   "query": { 
      "match_all": 
   }
}'

Jednak dla powyższego zapytania musisz zainstalować wtyczkę usuwania według zapytania, ponieważ Elasticsearch 2.0.0-beta1 usunięcie według zapytania zostało usunięte z głównego interfejsu API

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Po więcej

http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/

Shahid Ashraf
źródło
Zarówno przed instalacją wtyczki, jak i ponownym uruchomieniem ES pojawia się komunikat „Nie znaleziono modułu obsługi dla identyfikatora URI i metody”.
Mateusz
To nie działa w Elasticsearch 6+. Zamiast tego użyj _delete_by_query.
Shailesh Pratapwar
17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

wprowadź opis zdjęcia tutaj

#delete index:         curl -XDELETE 'localhost:9200/index_name'
#delete all indices:   curl -XDELETE 'localhost:9200/_all'
#delete document   :   curl -XDELETE 'localhost:9200/index_name/type_name/document_id'

Zainstaluj Kibana . Kibana ma inteligentniejsze narzędzie programistyczne, które pomaga w łatwym tworzeniu zapytań.

wprowadź opis zdjęcia tutaj

ysk
źródło
1
jaki jest sposób usuwania indeksów starszych niż 10 dni? Nie mogę korzystać z kuratora, ponieważ mój serwer nie obsługuje.
biolinh
9
curl -X DELETE 'https://localhost:9200/_all'

Zmiana httpdo httpsjeśli używasz certyfikatu SSL w was aplikacji

Vikash Chauhan
źródło
8

Możesz usunąć indeks w pythonie w następujący sposób

from elasticsearch import Elasticsearch

es = Elasticsearch([{'host':'localhost', 'port':'9200'}])

es.index(index='grades',doc_type='ist_samester',id=1,body={
    "Name":"Programming Fundamentals",
    "Grade":"A"
})

es.indices.delete(index='grades')
Farid ullah
źródło
7

W przypadku masowego usuwania według zapytania można użyć specjalnego interfejsu API usuwania według zapytania :

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

W historii ten interfejs API został usunięty, a następnie ponownie wprowadzony

Kto to interesujący ma długą historię.

  1. W pierwszej wersji tej odpowiedzi odsyłam do dokumentacji elasticsearch w wersji 1.6 . W nim ta funkcjonalność została oznaczona jako przestarzała, ale działa dobrze.
  2. W wersji 2.0 elasticsearch został przeniesiony do oddzielnej wtyczki . A nawet powodów stało wtyczki wyjaśnione .
  3. I znów pojawił się w podstawowym API w wersji 5.0 !
Hubbitus
źródło
3
Zachowaj ostrożność przy usuwaniu według zapytania. Jest przestarzałe z ważnego powodu. Błąd brak pamięci!
user3658423,
Pewnie. Ale możesz szpiegować, jeśli to się wydarzyło lub masz dość pamięci.
Hubbitus,
1
To nie jest już nieaktualna: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus
5

Chciałem usunąć indeks logstash i dużo szukałem różnych narzędzi, takich jak curl. Ale znalazłem rozwiązanie na końcu. Zaloguj się do Kibana. Przejdź do zakładki Dev Tools i wpisz DELETE /logstash-*w polu zapytania i naciśnij zielony przycisk strzałki. jeśli zostanie „potwierdzony”: prawda w odpowiedzi oznacza, że ​​dane zostały usunięte.

Ashish Kumar
źródło
DZIĘKUJĘ CI!!! wypróbowałem wiele innych opcji - tylko ta działała dla mnie.
eladyanai
5

Aby wyświetlić listę indeksów curl -L localhost:9200/_cat/indices

9200 port domyślny [zmień port, jeśli używasz innego portu]

Prawdopodobnie znajdziesz wszystkie indeksy zaczynające się na logstash-yyyy-mm-ddformat (logstash- *)

Możesz zobaczyć wszystkie indeksy i użyć

Aby usunąć indeksy i dane, uruchom następujące polecenie.

curl -XDELETE localhost:9200/index_name (Które usuną zarówno dane, jak i indeksy).

rajdeepbs29
źródło
4

Tutaj jest wiele dobrych odpowiedzi, ale jest też coś, co chciałbym dodać:

  • Jeśli korzystasz z usługi AWS ElasticSearch , nie możesz upuszczać / usuwać indeksów . Zamiast usuwać indeksy, musisz je ponownie zindeksować .
Facundo La Rocca
źródło
Właśnie usunąłem indeks w AWS ElasticSearch, moja domena działa ES 5.1.
gazarsgo
2
W AWS ES nie można otwierać / zamykać indeksów - to wymaga ponownego indeksowania. Możesz jednak usunąć indeksy. Zrobiłem to tylko za pomocą konsoli Kibana, ale na pewno działa.
Tom Dufall,
4

Możesz usunąć cały indeks, typ dokumentu lub dane identyfikatora podmiotu. są to trzy sposoby:

  1. curl -XDELETE localhost: 9200 / nazwa_indeksu

  2. curl -XDELETE localhost: 9200 / nazwa_indeksu / typ dokumentu

  3. curl -XDELETE localhost: 9200 / nazwa_indeksu / doc-type / documentId

a jeśli chcesz usunąć cały indeks, wybierz symbol wieloznaczny.

Gauraw
źródło
Cześć, mam nadzieję, że przed wykonaniem zapytania rozpoczniesz wyszukiwanie elastyczne i upewnij się, że domyślnie wiąże się ono ze wszystkimi lokalnymi adresami. i zamiast localhost możesz również użyć swojego adresu IP. jak 10.80.15.45:9200 I po sprawdzeniu twojego ustawienia ES mogę pomyśleć o sprawdzeniu w network.bind_host i upewnieniu się, że nie jest ustawione lub jest ustawione na 0.0.0.0 lub :: 0 lub na poprawny adres IP twojej sieci.
Gaurav
3

Możesz również usunąć indeks za pomocą akcji DELETE w „elasticsearch head” ( wtyczka do Chrome ). Dodaj go do swojego chrome i podłącz go do swojego hosta. Tam znajdziesz wszystkie swoje indeksy, a jeśli klikniesz przycisk czynności pod indeksem, który chcesz usunąć, znajdziesz opcję USUŃ w menu rozwijanym. kliknij i wpisz DELETE w wyskakującym okienku. Twój indeks zostanie usunięty. Rozszerzenie „Elasticsearch head” to łatwy sposób na przeglądanie indeksów i danych oraz zarządzanie nimi.

prateek kumar
źródło
2

Możesz użyć rozszerzenia chrome elasticsearch-head, aby usunąć indeks

ssh
źródło
2

Możesz usunąć indeks za pomocą Kibana Console:

Ikona konsoli

Aby uzyskać cały indeks:

GET /_cat/indices?v

Aby usunąć określony indeks:

DELETE /INDEX_NAME_TO_DELETE
FChiri
źródło
1

Możesz usunąć jeden lub więcej indeksów, które naprawdę usuwają ich pliki z dysku . Na przykład:

curl -XDELETE localhost:9200/$INDEXNAME

Gdzie $INDEXNAMEmoże być nazwa indeksu (np. users_v2), Indeksy N oddzielone przecinkiem (np users_v2,users_v3.). Wzorzec indeksu (np. users_*) Lub _allteż działa, chyba że jest zablokowany w konfiguracji przez action.destructive_requires_name: true.

Usuwanie pojedynczych dokumentów jest możliwe, ale nie spowoduje to natychmiastowego ich wyczyszczenia . Usunięcie to tylko miękkie usunięcie, a dokumenty są naprawdę usuwane podczas scalania segmentów . W tej prezentacji znajdziesz wiele szczegółów na temat segmentów i połączeń . Chodzi o Solr, ale scalenia pochodzą od Lucene, więc masz te same opcje w Elasticsearch.

Po powrocie do interfejsu API możesz usunąć pojedyncze dokumenty według identyfikatora (podaj wartość routingu, jeśli indeksujesz za pomocą routingu):

curl -XDELETE localhost:9200/users_v2/_doc/user1

Lub przez zapytanie:

curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
  "query": {
    "match": {
      "description_field": "bad user"
    }
  }
}'
Radu Gheorghe
źródło
0

Powiedz, że muszę usunąć indeks filebeat-7.6.2-2020.04.30-000001i wykonałem go za pomocą opcji curl DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") i powoduje to problem z uwierzytelnieniem, jak poniżej;

{
  "error" : {
    "type" : "security_exception",
    "reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
  },
  "status" : 401
}

W tym miejscu powinieneś uwierzytelnić żądanie zwijania przy użyciu nazwy użytkownika i hasła podanych dla Elasticsearch. Spróbuj więc

curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"

spowoduje {{potwierdzono ": prawda} .

kisHoR
źródło