การลบข้อมูลออกจาก ElasticSearch


362

ฉันใหม่เพื่อElasticSearch ฉันกำลังพยายามหาวิธีลบข้อมูลออกจาก ElasticSearch ฉันได้ลบดัชนีของฉันแล้ว อย่างไรก็ตามดูเหมือนว่าจะไม่เป็นการลบข้อมูลเอง สิ่งอื่น ๆ ที่ฉันเคยเห็นชี้ไปที่คุณลักษณะลบตามข้อความค้นหา อย่างไรก็ตามฉันไม่แน่ใจว่าจะค้นหาอะไร ฉันรู้ดัชนีของฉัน โดยพื้นฐานแล้วฉันต้องการทราบวิธีการทำ

DELETE FROM [Index]

จาก PostMan ใน Chrome อย่างไรก็ตามฉันไม่มีโชค ดูเหมือนว่าไม่ว่าฉันจะทำอะไรข้อมูลก็แฮงค์อยู่ ป่านนี้ฉันได้ลบดัชนีเรียบร้อยแล้วโดยใช้ DELETE HTTP Verb ใน PostMan และใช้ url เช่น:

   http://localhost:9200/[indexName]

อย่างไรก็ตามดูเหมือนว่าจะไม่ลบข้อมูล (เอกสารต้นฉบับ) ด้วยตนเอง


ฉันตรวจสอบเรื่องนี้กับบุรุษไปรษณีย์และได้รับ reposne เป็น "{" รับทราบแล้ว ": จริง}" ถ้าคุณเห็นการตอบรับที่ยอมรับนี้ไม่ต้องกังวล ดัชนีจะถูกลบออกจากความยืดหยุ่น
bijayk

คำตอบ:


428

คุณสามารถลบการใช้cURLหรือใช้เครื่องมือทางสายตาที่สร้างขึ้นสำหรับผู้ที่ชื่นชอบโอเพนซอร์สสำหรับ Elasticsearch

ใช้ cURL

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

เช่น

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

จากนั้นคุณจะได้รับคำตอบว่าสิ่งนี้สำเร็จหรือไม่ คุณสามารถลบทั้งดัชนีหรือประเภทด้วยดัชนีนอกจากนี้คุณยังสามารถลบประเภทโดยออก ID เอกสารเช่น -

curl -XDELETE localhost:9200/shop/product

หากคุณต้องการลบดัชนี -

curl -XDELETE localhost:9200/shop

หากคุณต้องการที่จะลบมากกว่าหนึ่งดัชนีที่เป็นไปตามข้อตกลงการตั้งชื่อ (หมายเหตุ*, ตัวแทน), -

curl -XDELETE localhost:9200/.mar* 

สายตา

มีเครื่องมือต่างๆผมจะเชื่อมโยงคุณไปหนึ่งซึ่งจะช่วยให้คุณสามารถเริ่มต้นได้ทันทีอยู่เป็นตามที่กล่าวไว้ข้างต้นผมเคยแสดงไว้ที่นี่ แต่ที่นี่ เครื่องมือนี้เรียกว่า KOPF เพื่อเชื่อมต่อกับโฮสต์ของคุณโปรดคลิกที่โลโก้ที่มุมบนซ้ายมือแล้วป้อน URL ของคลัสเตอร์ของคุณ

เมื่อเชื่อมต่อแล้วคุณจะสามารถจัดการคลัสเตอร์ทั้งหมดของคุณให้ลบเพิ่มประสิทธิภาพและปรับแต่งคลัสเตอร์ของคุณ


มีวิธีใดที่ฉันสามารถลบเอกสาร 3 ฉบับที่ฉันรู้ได้
HIRA THAKUR

@JayeshJain ความรู้ปัจจุบันของฉันไม่มี คุณสามารถใส่คำสั่ง curl -XDELETE 3 คำสั่งลงใน bash script แล้วเรียกใช้งานหรือเรียกใช้ 3 คำสั่งหลังจากนั้น
Opster Elasticsearch - Nathan

@JayeshJain curl -XDELETE localhost: 9200 / index / type / docid1 // curl -XDELETE localhost: 9200 / index / type / docid2 // curl -XDELETE localhost: 9200 / index / type / docid3
Opster Elasticsearch - Nathan

ฉันทำแบบเดียวกัน แต่ฉันแค่คิดว่ามีวิธีที่ชาญฉลาดในการลบเอกสารหลายรายการ ฉันสามารถใช้คำศัพท์ได้ถ้าฉันรู้เรื่องนี้ แต่ในสถานการณ์นี้ฉันแค่ต้องลบเอกสารด้วยรหัสของพวกเขา ขอบคุณทุกคน
HIRA THAKUR

2
ฉันจะลบดัชนีด้วยอักขระที่ไม่ถูกต้องเช่น logstash-eu -% {customer} -2016.11.22 ได้อย่างไร ฉันต้องการลบดัชนีทั้งหมด logstash-eu -% {ลูกค้า} - * หรือ 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

เอกสาร (หรือคู่มือการแตกหัก ) กล่าวว่าที่คุณยังสามารถใช้แบบสอบถามต่อไปที่จะลบทุกดัชนี:

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]

ผมขอแนะนำให้คุณใช้elastichammer

หลังจากลบคุณสามารถค้นหาว่าดัชนียังคงมีอยู่ด้วย URL ต่อไปนี้: http://[your_host]:9200/_stats/

โชคดี!


วิธีลบดัชนีที่เก่ากว่า 10 วันคืออะไร ฉันไม่สามารถใช้ผู้ดูแลเนื่องจากเซิร์ฟเวอร์ของฉันไม่รองรับ
biolinh

17

การลบดัชนีจะลบการแมปและพิมพ์ตามนั้น คุณสามารถลบแถวทั้งหมดได้ด้วยแบบสอบถามต่อไปนี้

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

อย่างไรก็ตามสำหรับการค้นหาข้างต้นคุณจำเป็นต้องติดตั้ง plugin-by-query เนื่องจาก Elasticsearch ของ 2.0.0-beta1 การลบโดยแบบสอบถามถูกลบออกจาก 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 และเมธอด"
Matthew อ่าน

สิ่งนี้ไม่ทำงานใน Elasticsearch 6+ ใช้ _delete_by_query แทน
Shailesh Pratapwar

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 Kibana มีเครื่องมือ dev ที่ชาญฉลาดซึ่งช่วยในการสร้างแบบสอบถามได้อย่างง่ายดาย

ป้อนคำอธิบายรูปภาพที่นี่


1
วิธีลบดัชนีที่เก่ากว่า 10 วันคืออะไร ฉันไม่สามารถใช้ผู้ดูแลเนื่องจากเซิร์ฟเวอร์ของฉันไม่รองรับ
biolinh

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

เปลี่ยนhttpเป็นhttpsหากคุณใช้ใบรับรอง SSL ในแอปพลิเคชันของคุณ


8

คุณสามารถลบดัชนีในไพ ธ อนได้ดังนี้

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. ในรุ่นแรกของคำตอบที่ผมหมายถึงเอกสารของ ElasticSearch รุ่น 1.6 ในนั้นฟังก์ชั่นถูกทำเครื่องหมายว่าเลิกใช้แล้ว แต่ใช้งานได้ดี
  2. ในรุ่น 2.0 ElasticSearch มันก็ถูกย้ายไปปลั๊กอินแยกต่างหาก และเหตุผลว่าทำไมแม้มันจะกลายเป็นปลั๊กอินอธิบาย
  3. และมันก็ปรากฏขึ้นอีกครั้งใน core API ในเวอร์ชัน 5.0 !

3
ระมัดระวังในการลบโดยใช้แบบสอบถาม มันเลิกใช้งานด้วยเหตุผลสำคัญ OutOfMemoryError!
user3658423

แน่ใจ แต่คุณอาจสืบถ้ามันเกิดขึ้นสำหรับคุณหรือคุณมีหน่วยความจำเพียงพอ
Hubbitus

1
นี้ไม่ได้เลิกใช้อีกต่อไป: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus

5

ฉันต้องการลบ logstash index และค้นหาข้อมูลมากมายเกี่ยวกับเครื่องมือต่าง ๆ เช่น curl แต่ก็พบทางออกในตอนท้าย เข้าสู่ Kibana ไปที่แท็บเครื่องมือ Dev และพิมพ์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

คุณสามารถลบทั้งดัชนีประเภทเอกสารหรือข้อมูลรหัสพติก นี่คือสามวิธี:

  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 ของคุณฉันสามารถคิดที่จะตรวจสอบใน network.bind_host และตรวจสอบให้แน่ใจว่าไม่ได้ตั้งค่าหรือตั้งเป็น 0.0.0.0 หรือ :: 0 หรือที่อยู่ IP ที่ถูกต้องสำหรับเครือข่ายของคุณ
Gaurav

3

คุณสามารถลบดัชนีโดยใช้การกระทำ DELETE ใน 'elasticsearch head' ( ปลั๊กอินของ Chrome ) เพิ่มลงใน chrome ของคุณและเชื่อมต่อกับโฮสต์ของคุณ คุณจะพบดัชนีทั้งหมดและหากคุณคลิกที่ปุ่มการกระทำด้านล่างดัชนีที่คุณต้องการลบคุณจะพบตัวเลือก DELETE ในเมนูแบบเลื่อนลง คลิกที่มันและป้อน DELETE ในป๊อปอัพ ดัชนีของคุณจะถูกลบ ส่วนขยาย 'Elasticsearch head' เป็นวิธีที่ง่ายในการดูและจัดการดัชนีและข้อมูลของคุณ


2

คุณสามารถใช้ส่วนขยายแบบยืดหยุ่นของโครเมียมส่วนหัวเพื่อลบดัชนี


2

คุณสามารถลบดัชนีโดย Kibana Console:

ไอคอนคอนโซล

ในการรับดัชนีทั้งหมด:

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ยังทำงานเว้นแต่จะถูกบล็อกในการกำหนดค่าผ่านทาง

การลบเอกสารแต่ละเป็นไปได้ แต่นี้จะไม่ได้ทันทีล้างพวกเขา ลบเป็นเพียงนุ่มลบและเอกสารจะถูกลบออกจริงๆในระหว่างการผสานส่วน คุณจะพบรายละเอียดมากมายเกี่ยวกับกลุ่มและผสานในงานนำเสนอนี้นี้ มันเกี่ยวกับ Solr แต่การผสานมาจาก Lucene คุณจึงมีตัวเลือกเดียวกันใน Elasticsearch

กลับไปที่ API คุณสามารถลบเอกสารแต่ละรายการด้วย ID (ระบุค่าการเราต์หากคุณจัดทำดัชนีด้วยการกำหนดเส้นทาง):

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
}

ที่นี่คุณควรตรวจสอบความถูกต้องของคำขอ curl โดยใช้ชื่อผู้ใช้และรหัสผ่านที่คุณให้ไว้สำหรับ Elasticsearch ลองดู

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

จะส่งผลให้เกิด{ "ได้รับการยอมรับ": จริง}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.