Xóa dữ liệu khỏi ElasticSearch


362

Tôi mới sử dụng tính năng Tìm kiếm đàn hồi . Tôi đang cố gắng tìm ra cách xóa dữ liệu khỏi ElasticSearch. Tôi đã xóa các chỉ mục của tôi. Tuy nhiên, điều đó dường như không thực sự loại bỏ dữ liệu. Những thứ khác tôi đã thấy chỉ đến tính năng Xóa theo Truy vấn . Tuy nhiên, tôi thậm chí không chắc chắn những gì để truy vấn. Tôi biết chỉ số của tôi. Về cơ bản, tôi muốn tìm ra cách để làm một

DELETE FROM [Index]

Từ Postman trong Chrome. Tuy nhiên, tôi không gặp may mắn. Có vẻ như bất kể tôi làm gì, dữ liệu bị treo xung quanh. Cho đến nay, tôi đã xóa thành công các chỉ mục bằng cách sử dụng Động từ HTTP XÓA trong PostMan và sử dụng một url như:

   http://localhost:9200/[indexName]

Tuy nhiên, điều đó dường như không thực sự loại bỏ dữ liệu (còn gọi là tài liệu).


Tôi kiểm tra điều này với người đưa thư và nhận được reposne là "{" thừa nhận ": true}" Nếu bạn thấy phản hồi được thừa nhận này, đừng lo lắng. Các chỉ số được loại bỏ khỏi đàn hồi.
bijayk

Câu trả lời:


428

Bạn có thể xóa bằng cách sử dụng cURLhoặc trực quan bằng một trong nhiều công cụ mà những người đam mê mã nguồn mở đã tạo ra cho Elaticsearch.

Sử dụng cURL

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

ví dụ

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

Sau đó, bạn sẽ nhận được trả lời về việc này có thành công hay không. Bạn cũng có thể xóa toàn bộ chỉ mục hoặc các loại bằng một chỉ mục, bạn có thể xóa một loại bằng cách bỏ ID tài liệu như vậy -

curl -XDELETE localhost:9200/shop/product

Nếu bạn muốn xóa một chỉ mục -

curl -XDELETE localhost:9200/shop

Nếu bạn muốn xóa nhiều hơn một chỉ mục theo một quy ước đặt tên nhất định (lưu ý *, ký tự đại diện), -

curl -XDELETE localhost:9200/.mar* 

Trực quan

Có nhiều công cụ khác nhau như đã đề cập ở trên, tôi sẽ không liệt kê chúng ở đây nhưng tôi sẽ liên kết bạn với một công cụ cho phép bạn bắt đầu ngay lập tức, nằm ở đây . Công cụ này được gọi là KOPF, để kết nối với máy chủ của bạn, vui lòng nhấp vào biểu tượng ở góc trên cùng bên trái và nhập URL của cụm của bạn.

Sau khi kết nối, bạn sẽ có thể quản trị toàn bộ cụm của mình, xóa, tối ưu hóa và điều chỉnh cụm của bạn.


Có cách nào để tôi có thể xóa 3 tài liệu mà tôi biết không.
HIRA THAKUR

@JayeshJain theo kiến ​​thức hiện tại của tôi, không. Bạn có thể đặt 3 lệnh curl -XDELETE đã sửa đổi vào tập lệnh bash và thực hiện hoặc chạy lần lượt 3 lệnh này.
Opster Elaticsearch - Nathan

@JayeshJain để curl -XDELETE localhost: 9200 / index / loại / docid1 // curl -XDELETE localhost: 9200 / index / loại / docid2 // curl -XDELETE localhost: 9200 / index / loại / docid3
Opster Elasticsearch - Nathan

tôi đã làm nó theo cùng một cách. Nhưng tôi chỉ nghĩ nếu có một cách thông minh hơn để xóa nhiều tài liệu. Tôi có thể sử dụng thuật ngữ nếu tôi biết lĩnh vực này. Nhưng trong kịch bản này, tôi chỉ cần xóa tài liệu theo id của họ. Dù sao đi nữa
HIRA THAKUR 8/07/2015

2
Làm cách nào tôi có thể xóa một chỉ mục có ký tự không hợp lệ, ví dụ: logstash-eu -% {customer} -2016.11.22. Tôi muốn xóa TẤT CẢ các chỉ số logstash-eu -% {khách hàng} - * hoặc logstash-eu -% *
Chris F

459

Nếu bạn cần xóa tất cả các chỉ mục, điều này có thể có ích:

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

Quyền hạn:

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

20
điều này rất hữu ích để phát triển và cần thiết lập lại cơ sở dữ liệu (trống). Cảm ơn!!
Artistan

3
trong bash_profile của bạn tạo một bí danh cho lệnh này và nó sẽ có ích để phát triển.
dùng805981

2
'Biểu thức ký tự đại diện hoặc tất cả các chỉ số đều không được phép'
ZurabWeb

1
Lưu ý rằng điều này sẽ xóa tất cả dữ liệu, bao gồm thông tin đăng nhập truy cập x-pack của bạn.
Gajus

2
Điều này cũng đang xóa bảng điều khiển và trực quan hóa Kibana
nano

54

Các tài liệu hướng dẫn (hay The Definitive Guide ) cho biết, rằng bạn cũng có thể sử dụng các truy vấn tiếp theo để xóa tất cả các chỉ số:

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

Và có một lưu ý quan trọng:

Đối với một số người, khả năng xóa tất cả dữ liệu của bạn bằng một lệnh duy nhất là một triển vọng rất đáng sợ. Nếu bạn muốn loại bỏ khả năng xóa hàng loạt ngẫu nhiên, bạn có thể đặt như sau truetrong elasticsearch.yml:

action.destructive_requires_name: true


30

Bạn phải gửi DELETEyêu cầu đến

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

Bạn cũng có thể xóa một tài liệu duy nhất:

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

Tôi đề nghị bạn sử dụng elastichammer .

Sau khi xóa, bạn có thể tra cứu nếu chỉ mục vẫn tồn tại với URL sau: http://[your_host]:9200/_stats/

Chúc may mắn!


cách để xóa các chỉ số cũ hơn 10 ngày là gì? Tôi không thể sử dụng curator vì máy chủ của tôi không hỗ trợ.
biolinh

17

Xóa chỉ mục sẽ xóa ánh xạ và gõ cùng. bạn có thể xóa tất cả các hàng bằng truy vấn sau

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

Tuy nhiên, đối với truy vấn trên, bạn cần cài đặt plugin xóa theo truy vấn vì truy vấn xóa theo truy vấn 2.0.0-beta1 của ElSTERearch đã bị xóa khỏi api chính

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Để biết thêm

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


Cả trước và sau khi cài đặt plugin và khởi động lại ES, tôi nhận được "Không tìm thấy trình xử lý nào cho uri và phương thức".
Matthew đọc

Điều này không hoạt động trong Elaticsearch 6+. Sử dụng _delete_by_query thay thế.
Shailesh Pratapwar

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

nhập mô tả hình ảnh ở đây

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

Cài đặt kibana . Kibana có một công cụ dev thông minh hơn giúp xây dựng truy vấn dễ dàng.

nhập mô tả hình ảnh ở đây


1
cách để xóa các chỉ số cũ hơn 10 ngày là gì? Tôi không thể sử dụng curator vì máy chủ của tôi không hỗ trợ.
biolinh

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

Thay đổi httpthành httpsnếu bạn đang sử dụng chứng chỉ SSL trong ứng dụng của mình


8

Bạn có thể xóa một chỉ mục trong python như sau

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

Để xóa hàng loạt theo truy vấn, bạn có thể sử dụng xóa đặc biệt bằng API truy vấn :

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

Trong lịch sử, API đã bị xóa và sau đó được giới thiệu lại

Ai thú vị nó có lịch sử lâu dài.

  1. Trong phiên bản đầu tiên của câu trả lời đó, tôi đề cập đến tài liệu của elaticsearch phiên bản 1.6 . Trong đó chức năng được đánh dấu là không dùng nữa nhưng hoạt động tốt.
  2. Trong phiên bản elaticsearch 2.0, nó đã được chuyển sang plugin riêng . Và thậm chí lý do tại sao nó trở thành plugin giải thích .
  3. Và nó lại xuất hiện trong API lõi trong phiên bản 5.0 !

3
Hãy cẩn thận bằng cách sử dụng xóa theo truy vấn. Nó phản đối vì một lý do chính. Lỗi bộ nhớ!
dùng3658423

Chắc chắn rồi. Nhưng bạn có thể làm gián điệp nếu nó xảy ra cho bạn hoặc bạn có bộ nhớ không ổn định.
Hubbitus

1
Điều này không phản đối nữa: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus

5

Tôi muốn xóa chỉ mục logstash và tìm kiếm rất nhiều về các công cụ khác nhau như curl. Nhưng tìm thấy giải pháp cuối cùng. Đăng nhập vào Kibana. Chuyển đến tab Dev Tools và nhập DELETE /logstash-*vào trường truy vấn và nhấn nút mũi tên màu xanh lá cây. nếu bạn nhận được "thừa nhận": đúng trong phản hồi có nghĩa là dữ liệu đã bị xóa.


CẢM ƠN BẠN!!! tôi đã thử nhiều lựa chọn khác - đây là lựa chọn duy nhất phù hợp với tôi.
eladyanai

5

Để liệt kê các chỉ số curl -L localhost:9200/_cat/indices

9200 cổng mặc định [thay đổi cổng nếu sử dụng một số cổng khác]

Bạn có thể sẽ tìm thấy tất cả các chỉ mục bắt đầu bằng logstash-yyyy-mm-ddđịnh dạng (logstash- *)

Bạn có thể xem tất cả các chỉ số và sử dụng

Để xóa các chỉ số và kích hoạt dữ liệu theo lệnh.

curl -XDELETE localhost:9200/index_name (Sẽ xóa dữ liệu và chỉ mục cả hai).


4

Có rất nhiều câu trả lời hay ở đây, nhưng cũng có một vài điều tôi muốn thêm vào:

  • Nếu bạn đang chạy trên dịch vụ AWS ElasticSearch , bạn có thể xóa / xóa chỉ mục . Thay vì xóa các chỉ mục, bạn phải reindex chúng .

Chỉ cần xóa một chỉ mục trên AWS ElasticSearch, tên miền của tôi đang chạy ES 5.1.
gazarsgo

2
Trên AWS ES, bạn không thể mở / đóng chỉ mục - điều đó đòi hỏi phải lập lại. Bạn có thể, tuy nhiên, xóa các chỉ mục. Tôi chỉ thực hiện nó thông qua bảng điều khiển Kibana, nhưng nó chắc chắn hoạt động.
Tom Dufall

4

Bạn có thể xóa toàn bộ chỉ mục, loại tài liệu hoặc dữ liệu id vuông góc. đây là ba cách:

  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

và nếu bạn muốn xóa tất cả các chỉ mục thì hãy tìm ký tự đại diện.


Xin chào, tôi hy vọng trước khi thực hiện các truy vấn, bạn đã bắt đầu tìm kiếm linh hoạt và đảm bảo theo mặc định nó liên kết với tất cả các địa chỉ cục bộ. và thay vì localhost, bạn cũng có thể sử dụng địa chỉ IP của mình. như 10.80.15.45:9200 Và một khi kiểm tra cài đặt ES của bạn, tôi có thể nghĩ để kiểm tra trong mạng.bind_host và đảm bảo rằng nó không được đặt hoặc được đặt thành 0.0.0.0 hoặc :: 0 hoặc đến địa chỉ IP chính xác cho mạng của bạn.
Gaurav

3

Bạn cũng có thể xóa chỉ mục bằng cách sử dụng hành động XÓA trong 'đầu tìm kiếm' ( plugin Chrome ). Thêm nó vào chrome của bạn và kết nối nó với máy chủ của bạn. Ở đó bạn sẽ tìm thấy tất cả các chỉ số của mình và nếu bạn nhấp vào nút hành động bên dưới chỉ mục bạn muốn xóa, bạn sẽ tìm thấy tùy chọn XÓA trong trình đơn thả xuống. nhấp vào nó và nhập XÓA trong cửa sổ bật lên. Chỉ mục của bạn sẽ bị xóa. Tiện ích mở rộng 'đầu Elaticsearch' là một cách dễ dàng để xem và quản lý các chỉ mục và dữ liệu của bạn.


2

Bạn có thể sử dụng phần mở rộng của phần mở rộng chrome để xóa chỉ mục


2

Bạn có thể xóa chỉ mục bằng Bảng điều khiển Kibana:

Biểu tượng bảng điều khiển

Để có được tất cả các chỉ số:

GET /_cat/indices?v

Để xóa một chỉ mục cụ thể:

DELETE /INDEX_NAME_TO_DELETE

1

Bạn có thể xóa một hoặc nhiều chỉ mục, thực sự xóa các tệp của họ khỏi đĩa . Ví dụ:

curl -XDELETE localhost:9200/$INDEXNAME

Trường hợp $INDEXNAMEcó thể là một tên chỉ mục (ví dụ users_v2), N chỉ số được phân tách bằng dấu phẩy (ví dụ users_v2,users_v3). Một mẫu chỉ mục (ví dụ users_*) hoặc _all, cũng hoạt động, trừ khi nó bị chặn trong cấu hình thông qua action.destructive_requires_name: true.

Xóa các tài liệu riêng lẻ là có thể, nhưng điều này sẽ không ngay lập tức thanh lọc chúng . Xóa chỉ là xóa mềm và các tài liệu thực sự bị xóa trong quá trình hợp nhất phân khúc . Bạn sẽ tìm thấy nhiều chi tiết về các phân khúc và hợp nhất trong bản trình bày này . Đó là về Solr, nhưng sự hợp nhất là từ Lucene, vì vậy bạn có các tùy chọn tương tự trong Elaticsearch.

Quay lại API, bạn có thể xóa từng tài liệu bằng ID (cung cấp giá trị định tuyến nếu bạn lập chỉ mục với định tuyến):

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

Hoặc bằng truy vấn:

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

0

Nói rằng tôi cần xóa một chỉ mục filebeat-7.6.2-2020.04.30-000001và tôi đã thực hiện nó bằng cách sử dụng tùy chọn XÓA ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") và gây ra vấn đề xác thực như dưới đây;

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

Tại đây, bạn nên xác thực yêu cầu curl bằng tên người dùng và mật khẩu bạn đã cung cấp cho Elaticsearch. Hãy thử

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

sẽ dẫn đến {"thừa nhận": đúng} .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.