2013-09-25 36 views
19

Tôi muốn xóa tất cả tài liệu được lập chỉ mục trong một loại trong Elasticsearch, sử dụng api HTTP/REST, nhưng tôi không muốn xóa ánh xạ cho loại nàyXóa tài liệu thuộc loại trong Elasticsearch

Làm cách nào tôi có thể xây dựng truy vấn trong URL để làm điều này?

Trả lời

16

Trước khi lệnh thực hiện, chỉ số/bản đồ tiểu bang; (Ảnh chụp màn hình lấy từ elasticsearch cắm đầu giao diện web)

enter image description here

enter image description here

enter image description here

lệnh;

curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d ' 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match_all": {} 
     } 
     ] 
    } 
    } 
} 
' 

Kết quả;

enter image description here

Sau khi lệnh thực hiện, tình trạng chỉ số/bản đồ;

enter image description here

enter image description here

enter image description here

Như chúng ta có thể thấy chúng tôi đã xóa tất cả các tài liệu được lập chỉ mục trong vòng một kiểu (mapping) mà không chỉ xóa hoặc loại (mapping).

+0

điều này không hoạt động – localhost

+0

'twitter' là tên chỉ mục và 'tweet' là tên ánh xạ trong lệnh. Bạn đã thay thế chúng đúng cách với trường hợp của bạn? – csonuryilmaz

+0

chắc chắn. Tôi nghĩ rằng nó phụ thuộc vào phiên bản elasticsearch. Tôi cũng có một số truy vấn từ hướng dẫn elasticsearch và nhận được một ngoại lệ không thể bỏ qua. – localhost

7

Xóa đơn giản theo truy vấn bằng truy vấn match_all sẽ thực hiện thủ thuật. Bạn có thể lấy thêm thông tin ở đây:

delete by query api

Ngoài ra, bạn có thể xóa toàn bộ loại và tận dụng các mẫu api. Chỉ cần thả một tập tin trong config/templates/thư mục của bạn có chứa mẫu của bạn, và bạn sẽ không bao giờ mất nó. Ánh xạ thực sự sẽ bị mất khi bạn xóa bản đồ, nhưng mẫu sẽ được sử dụng lại ngay khi bạn lập chỉ mục lại một lần nữa. Dưới đây là một số thông tin thêm:

template api

EDIT: mới xóa api: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

+2

Có vẻ như không được chấp nhận – Tjorriemorrie

+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html –

-3

sử dụng:

curl -XDELETE 'http://{server}/{index_name}/{type_name}/' 

(như trong documentation)

+0

Mặc dù điều này dường như hoạt động nhưng nó không phải là một phần của tài liệu cho delete_by_query. Tuy nhiên điều đó cũng xóa ánh xạ, vì vậy bạn nên sử dụng delete_by_query đầy đủ, với truy vấn đối sánh-tất cả. – rakensi

+4

Thao tác này sẽ xóa toàn bộ loại tài liệu và không chỉ các tài liệu. – Oliver

4

Với lệnh sau trong plugin elasticsearch đầu tôi đã có thể xóa tất cả các văn bản của loại logs từ chỉ số logstash mà không xóa các bản đồ:

{"query":{"match_all":{}}} 

Deleting documents with Elasticsearch head plugin

Để không gian trống trên đĩa bạn cũng phải tối ưu hóa chỉ mục (Hành động-> Tối ưu hóa cho chỉ mục logstash trong plugin đầu) sau khi xóa tài liệu.

0

Nếu bạn muốn làm điều này trong golang, sử dụng thư viện "olviere/elastic", bạn có thể sử dụng mã này, giả sử bạn có một khách hàng yourClient, và yourIndexyourType:

bq := elastic.NewBoolQuery() 
    bq.Must(elastic.NewMatchAllQuery()) 
    _, err := elastic.NewDeleteByQueryService(yourClient). 
     Index(yourIndex). 
     Type(yourType). 
     Query(bq). 
     Do() 
0
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy' 

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

câu trả lời trước sẽ không hoạt động với phiên bản mới nhất của Elasticsearch. "Xóa theo truy vấn" đã không được chấp nhận từ Elasticsearch 2.0. Elasticsearch tài liệu nói rằng nó có thể gây ra lỗi OutOfMemoryError trong quá trình lập chỉ mục đồng thời và có thể làm cho bản sao chính và bản sao trở nên không nhất quán. Nếu bạn muốn theo dõi lịch sử của sự cố trong Github.

Hiện tại, thực hiện nhiều bước để xóa tất cả tài liệu khỏi type.

  1. Tìm tất cả các id của tài liệu mà bạn cần xóa. Cách hiệu quả nhất để thực hiện thao tác này là sử dụng scroll/scan API để tìm tất cả các id phù hợp cho một loại nhất định.

  2. Đưa ra yêu cầu hàng loạt để xóa tài liệu theo id. Một ví dụ được cung cấp bên dưới.

    curl -XPOST 'http://localhost:9200/_bulk' -d ' 
        { "delete": { "_index": "index", "_type": "type", "_id": "1"} 
        { "delete": { "_index": "index", "_type": "type", "_id": "2"}' 
    

Lưu ý rằng nếu bạn đang cung cấp một đầu vào tập tin văn bản để cuộn tròn, bạn phải sử dụng --data-binary cờ thay vì đơn giản -d.