Удаление данных из ElasticSearch

363

Я новичок в ElasticSearch . Я пытаюсь выяснить, как удалить данные из ElasticSearch. Я удалил свои индексы. Тем не менее, похоже, что это на самом деле не удаляет сами данные. Другие вещи, которые я видел, указывают на функцию удаления по запросу . Тем не менее, я даже не уверен, что запросить. Я знаю свои показатели. По сути, я хотел бы выяснить, как сделать

DELETE FROM [Index]

Из PostMan в Chrome. Однако мне не повезло. Кажется, что независимо от того, что я делаю, данные зависают. До сих пор я успешно удалил индексы, используя HTTP-глагол DELETE в PostMan и используя URL-адрес:

   http://localhost:9200/[indexName]

Тем не менее, это, по-видимому, фактически не удаляет сами данные (или документы).

user687554
источник
Я проверяю это с почтальоном и получаю reposne как "{" подтвержденный ": true}" Если вы видите этот подтвержденный ответ, не беспокойтесь. Индекс снят с эластичного.
Биджак

Ответы:

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 вашего кластера.

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

Opster Elasticsearch - Натан
источник
Есть ли способ удалить 3 документа, идентификатор которых я знаю.
ХИРА ТАКУР
@ 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 - Натан,
Я сделал это так же. Но я просто подумал, есть ли более разумный способ удаления нескольких документов. Я мог бы использовать термин, если бы знал поле. Но в этом случае мне просто нужно удалить документы по их идентификатору. Спасибо в любом случае
ХИРА ТАКУР
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 создайте псевдоним для этой команды, и он пригодится для разработки.
user805981
2
«Подстановочные выражения или все индексы недопустимы»
ZurabWeb
1
Обратите внимание, что при этом будут удалены все данные, включая ваши учетные данные для доступа к x-pack.
Gajus
2
Это также приводит к удалению панелей и визуализаций Kibana
nano
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/

Удачи!

Jesper
источник
Как удалить индексы старше 10 дней? Я не могу использовать куратор, потому что мой сервер не поддерживает.
Биолин
17

Удаление индекса приведет к удалению сопоставления и вводу. Вы можете удалить все строки по следующему запросу

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

Однако для вышеупомянутого запроса вам нужно установить плагин delete-by-query, поскольку Elasticsearch 2.0.0-beta1 delete-by-query был удален из основного API

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, я получаю «Не найден обработчик для URI и метода».
Мэтью Прочитал
Это не работает в 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 есть более умный инструмент разработки, который помогает легко создавать запросы.

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

YSK
источник
1
Как удалить индексы старше 10 дней? Я не могу использовать куратор, потому что мой сервер не поддерживает.
Биолин
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. В версииasticsearch 2.0 он был перемещен в отдельный плагин . И даже причины, по которым он стал плагином, объяснили .
  3. И это снова появилось в основном API в версии 5.0 !
Hubbitus
источник
3
Будьте осторожны, используя удаление по запросу. Его не рекомендуется по основной причине. OutOfMemoryError!
user3658423
Конечно. Но вы можете шпионить, если это случилось с вами или у вас достаточно памяти.
Hubbitus
1
Это больше не считается
Hubbitus
5

Я хотел удалить индекс logstash и много искал в отношении различных инструментов, таких как curl. Но нашел решение в конце. Войдите в Kibana. Перейдите на вкладку Dev Tools, введите DELETE /logstash-*в поле запроса и нажмите зеленую кнопку со стрелкой. если вы получили «подтверждено»: true в ответ означает, что данные были очищены.

Ашиш Кумар
источник
БЛАГОДАРЮ ВАС!!! Я пробовал много других вариантов - это единственный, который работал для меня.
eladyanai
5

Чтобы перечислить индексы curl -L localhost:9200/_cat/indices

9200 порт по умолчанию [изменить порт при использовании другого порта]

Скорее всего, вы найдете все индексы, начинающиеся с logstash-yyyy-mm-ddформата (logstash- *)

Вы можете увидеть все индексы и использовать

Для удаления индексов и данных запускаем следующую команду.

curl -XDELETE localhost:9200/index_name (Который удалит данные и индексы оба).

rajdeepbs29
источник
4

Здесь есть много хороших ответов, но я хотел бы добавить еще кое-что:

  • Если вы работаете в сервисе AWS ElasticSearch , вы не можете удалить / удалить индексы . Вместо удаления индексов вы должны переиндексировать их .
Факундо Ла Рокка
источник
Только что удалил индекс на AWS ElasticSearch, мой домен работает под управлением ES 5.1.
Газарсго
2
В AWS ES вы не можете открывать / закрывать индексы - это требует переиндексации. Вы можете, однако, удалить индексы. Я сделал это только через консоль Kibana, но это определенно работает.
Том Дафолл
4

Вы можете удалить либо весь индекс, либо тип документа, либо данные о перкулярном идентификаторе. это три способа:

  1. curl -XDELETE localhost: 9200 / index_name

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

  3. curl -XDELETE localhost: 9200 / имя_индекса / тип документа / идентификатор документа

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

Gaurav
источник
Привет, я надеюсь, что перед выполнением запросов вы запустили свой упругий поиск и убедитесь, что по умолчанию он привязан ко всем локальным адресам. и вместо localhost вы также можете использовать свой IP-адрес. как 10.80.15.45:9200 И однажды проверив настройки ES, я могу подумать о том, чтобы проверить network.bind_host и убедиться, что он либо не установлен, либо имеет значение 0.0.0.0 или :: 0, либо правильный IP-адрес для вашей сети.
Гаурав
3

Вы также можете удалить указатель, используя действие DELETE в «asticsearch head »( плагин Chrome ). Добавьте его в Chrome и подключите к хосту. Там вы найдете все свои индексы, и если вы нажмете кнопку действий под индексом, который хотите удалить, вы найдете опцию УДАЛИТЬ в выпадающем списке. щелкните по нему и введите УДАЛИТЬ во всплывающем окне. Ваш индекс будет удален. Расширение Elasticsearch head - это простой способ просмотра и управления вашими индексами и данными.

Prateek Kumar
источник
2

Вы можете использовать chrome extensionasticsearch-head для удаления индекса

SSH
источник
2

Вы можете удалить индекс с помощью Kibana Console:

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

Чтобы получить весь индекс:

GET /_cat/indices?v

Чтобы удалить определенный индекс:

DELETE /INDEX_NAME_TO_DELETE
FChiri
источник
1

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

curl -XDELETE localhost:9200/$INDEXNAME

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

Удаление отдельных документов возможно, но это не приведет к немедленной очистке . Удаление - это только мягкое удаление, и документы действительно удаляются при объединении сегментов . Вы найдете много деталей о сегментах и ​​слияниях в этой презентации . Речь идет о Solr, но слияния происходят из Lucene, поэтому у вас есть те же параметры в 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и я выполнил его с помощью опции curl DELETE ( 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
}

Здесь вы должны аутентифицировать запрос curl, используя имя пользователя и пароль, которые вы указали для Elasticsearch. Попробуй тогда

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

приведет к {"подтверждено": правда} .

Кишор
источник