Видалення даних з ElasticSearch


361

Я новачок у ElasticSearch . Я намагаюся розібратися, як видалити дані з ElasticSearch. Я видалив свої індекси. Однак це, здається, фактично не видаляє самі дані. Інші речі, які я бачив, вказують на функцію Видалити за запитом . Однак я навіть не впевнений, на що звертатись. Я знаю свої індекси. По суті, я хотів би розібратися, як це зробити

DELETE FROM [Index]

Від PostMan в Chrome. Однак мені не пощастило. Схоже, що б я не робив, дані звисають. Поки що я успішно видалив індекси за допомогою дієслова DELETE HTTP у PostMan та за допомогою URL-адреси, наприклад:

   http://localhost:9200/[indexName]

Однак, схоже, самі фактично не видаляють дані (ака-документи).


Я перевірив це у листоноші і отримав відповідь як "{" визнаний ": правда}" Якщо ви бачите цю визнану відповідь, не хвилюйтесь. Покажчик знімається з еластичного.
bijayk

Відповіді:


428

Ви можете видалити за допомогою cURLабо візуально за допомогою одного з багатьох інструментів, які ентузіасти з відкритим кодом створили для Elasticsearch.

Використання CURL

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

напр

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

Потім ви отримаєте відповідь про те, успішно це чи ні. Ви можете також видалити цілий індекс або типи з індексом, а також видалити тип, залишивши такий ідентифікатор документа, як -

curl -XDELETE localhost:9200/shop/product

Якщо ви хочете видалити індекс -

curl -XDELETE localhost:9200/shop

Якщо ви хочете видалити більше одного індексу, який дотримується певної умови іменування (зверніть увагу *, підстановку), -

curl -XDELETE localhost:9200/.mar* 

Візуально

Існують різні інструменти , як уже згадувалося вище, я не буду перераховувати їх тут , але я з'єднає вас з одним , який дозволить вам почати прямо зараз, знаходиться тут . Цей інструмент називається KOPF, для підключення до вашого хоста натисніть логотип у верхньому лівому куті та введіть URL-адресу кластеру.

Після підключення ви зможете адмініструвати весь свій кластер, видалити, оптимізувати та налаштувати кластер.


Чи є якийсь спосіб я можу видалити 3 документа, з яких я знаю.
HIRA THAKUR

@JayeshJain, наскільки я знаю, ні. Ви можете помістити 3 модифіковані команди curl -XDELETE в скрипт bash та виконати або запустити 3 одна за одною.
Opster Elasticsearch - Натан

@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 - Натан

Я зробив це так само. Але я просто думав, чи є розумніший спосіб видалення декількох документів. Я міг би використовувати термін, якби знав поле. Але в цьому сценарії мені просто потрібно видалити документи за своїм ідентифікатором. Thx у будь-якому випадку
HIRA THAKUR

2
Як я можу видалити індекс з недійсним символом, наприклад, logstash-eu -% {customer} -2016.11.22. Я хочу видалити ВСІ індекси logstash-eu -% {customer} - * або logstash-eu -% *
Chris F

459

Якщо вам потрібно буде видалити всі індекси, це може стати в нагоді:

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

Powershell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all

20
це дуже корисно для розробки та потребує скидання назад до подряпини (порожньої) бази даних. Дякую!!
Artistan

3
у вашому bash_profile створіть псевдонім для цієї команди, і він стане в нагоді для розробки.
користувач805981

2
"Замісні вирази або всі індекси заборонені"
ZurabWeb

1
Зауважте, що цим буде видалено всі дані, включаючи ваші облікові дані x-pack.
Гаджус

2
Це також видалення інформаційних панелей і візуалізацій Kibana
нано

54

Документація (або The Definitive Guide ) говорить, що ви також можете виконати такий запит , щоб видалити всі індекси:

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

І є важлива примітка:

Для когось можливість видалення всіх даних за допомогою однієї команди - дуже страшна перспектива. Якщо ви хочете усунути можливість випадкового масового видалення, ви можете встановити наступне trueу своєму elasticsearch.yml:

action.destructive_requires_name: true


30

Вам потрібно надіслати DELETEзапит на адресу

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

Ви також можете видалити один документ:

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

Я пропоную вам використовувати еластичний молоток .

Після видалення ви можете переглянути, чи не існує індексу із такою URL-адресою: http://[your_host]:9200/_stats/

Удачі!


який спосіб видалення індексів старше 10 днів? Я не можу використовувати куратор, оскільки мій сервер не підтримує.
biolinh

17

Видалення індексу видалить відображення та наберемо разом. ви можете видалити всі рядки за допомогою наступного запиту

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

Однак для вищезазначеного запиту вам потрібно встановити плагін видалення за запитом, оскільки видалення за запитом видалення Elasticsearch 2.0.0-beta1 було видалено з основної програми

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Для більш

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


Як до, так і після установки плагіна та перезавантаження ES, я отримую "Не знайдено обробника для урі та методу".
Матвій

Це не працює в Elasticsearch 6+. Використовуйте замість _delete_by_query.
Шайлеш Пратапвар

17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

введіть тут опис зображення

#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'

Встановіть кібану . Kibana має розумніший інструмент для розробників, який допомагає легко створювати запити.

введіть тут опис зображення


1
який спосіб видалення індексів старше 10 днів? Я не можу використовувати куратор, оскільки мій сервер не підтримує.
biolinh

9
curl -X DELETE 'https://localhost:9200/_all'

Зміна httpдо , httpsякщо ви використовуєте SSL сертифікат в вас додатку


8

Ви можете видалити індекс у python наступним чином

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')


7

Для масового видалення за запитом ви можете використовувати спеціальне видалення за допомогою запиту API :

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

В історії цей API був видалений і знову введений знову

Кому цікаво це довга історія.

  1. У першій версії цієї відповіді я посилаюся на документацію еластичного дослідження версії 1.6 . У ньому ця функціональність позначена як застаріла, але працює добре.
  2. У версії 2.0 еластичного пошуку було переміщено до окремого плагіна . І навіть причини, чому він став плагіном, пояснюються .
  3. І знову з'явився в API API у версії 5.0 !

3
Будьте обережні, використовуючи видалити за запитом. Його застаріла з головної причини. OutOfMemoryError!
user3658423

Звичайно. Але ви можете шпигувати, якщо це сталося з вами або у вас є пам'ять.
Губбіт

1
Це більше не застаріло: elastic.co/guide/en/elasticsearch/reference/6.4/…
Hubbitus

5

Я хотів видалити індекс logstash і багато шукав щодо різних інструментів, таких як curl. Але знайшов рішення наприкінці. Вхід у Кібану. Перейдіть на вкладку «Інструменти розробки» та введіть DELETE /logstash-*у полі запит і натисніть зелену кнопку стрілки. якщо ви отримаєте "визнання": істина у відповідь, це означає, що дані були очищені.


ДЯКУЮ ТОБІ!!! Я спробував багато інших варіантів - це єдиний, який працював на мене.
eladyanai

5

Щоб перерахувати індекси curl -L localhost:9200/_cat/indices

9200 стандартний порт [змінити порт, якщо використовується інший порт]

Ви, ймовірно, знайдете всі індекси, починаючи з logstash-yyyy-mm-ddформату (logstash- *)

Ви можете побачити всі індекси та використовувати

Щоб видалити індекси та тригер даних, виконайте наступну команду.

curl -XDELETE localhost:9200/index_name (Що дозволить видалити дані та індекси обох).


4

Тут є багато хороших відповідей, але є ще щось, що я хотів би додати:

  • Якщо ви працюєте на службі AWS ElasticSearch , ви не можете скидати / видаляти індекси . Замість видалення індексів потрібно перевстановити їх .

Щойно видаливши індекс на AWS ElasticSearch, мій домен працює під керуванням ES 5.1.
gazarsgo

2
На AWS ES ви не можете відкрити / закрити індекси - що вимагає повторного введення в дію. Однак ви можете видалити індекси. Я це робив лише через консоль Kibana, але це безумовно працює.
Tom Dufall

4

Ви можете видалити цілий індекс, тип doc або perticular id id. це три способи:

  1. curl -XDELETE localhost: 9200 / index_name

  2. curl -XDELETE localhost: 9200 / index_name / doc-type

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

і якщо ви хочете видалити весь індекс, перейдіть на підстановку.


Привіт, сподіваюся, перед виконанням запитів ви розпочали еластичний пошук і переконайтеся, що він за замовчуванням прив’язує до всіх локальних адрес. і замість localhost ви також можете використовувати свою IP-адресу. наприклад 10.80.15.45:9200 І як тільки перевірте налаштування ES, я можу подумати перевірити мережу.bind_host і переконайтесь, що він або не встановлений, або встановлено на 0,0.0.0 або :: 0 або на правильну IP-адресу для вашої мережі.
Гаурав

3

Ви також можете видалити індекс, скориставшись дією DELETE у "elastsearch head" ( плагін Chrome ). Додайте його до свого хрому та підключіть до свого хоста. Там ви знайдете всі ваші індекси, і якщо натиснути кнопку дії під індексом, який ви хочете видалити, ви знайдете варіант ВИДАЛИТИ у спадному меню. натисніть на неї та введіть DELETE у спливаючому вікні. Ваш індекс буде видалено. Розширення 'Elasticsearch head' - це простий спосіб перегляду та керування вашими індексами та даними.


2

Ви можете використовувати еластичну головку з хромованим розширенням для видалення індексу


2

Ви можете видалити індекс за допомогою консолі Kibana:

Значок консолі

Щоб отримати весь індекс:

GET /_cat/indices?v

Щоб видалити певний індекс:

DELETE /INDEX_NAME_TO_DELETE

1

Ви можете видалити один або кілька індексів, які дійсно видаляють їх файли з диска . Наприклад:

curl -XDELETE localhost:9200/$INDEXNAME

Де $INDEXNAMEможе бути ім'я індексу (наприклад users_v2), N індексів, розділених комою (наприклад users_v2,users_v3). Шаблон індексу (наприклад users_*) або _all, також, працює, якщо він не заблокований у конфігурації через action.destructive_requires_name: true.

Видалення окремих документів можливо, але це не одразу їх очистить . Видалення - це лише м'яке видалення, а документи дійсно видаляються під час об’єднання сегментів . У цій презентації ви знайдете безліч деталей про сегменти та злиття . Йдеться про Солра, але злиття відбуваються з Люцена, тож у вас є ті ж варіанти в Elasticsearch.

Повернувшись до API, ви можете видалити окремі документи за ідентифікатором (надайте значення маршрутизації, якщо індексуєте маршрутизацією):

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

Або за запитом:

curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
  "query": {
    "match": {
      "description_field": "bad user"
    }
  }
}'

0

Скажіть, що мені потрібно видалити індекс, filebeat-7.6.2-2020.04.30-000001і я виконав його, використовуючи параметр DELETE curl ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") і призводить до проблеми автентифікації, як показано нижче;

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

Тут ви повинні підтвердити запит на згортання, використовуючи ім’я користувача та пароль, які ви вказали для Elasticsearch. Спробуйте потім

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

призведе до {"визнано": true} .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.