Cách xóa tất cả dữ liệu khỏi solr và hbase


Câu trả lời:


190

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

bạn có thể kích hoạt url http -

http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true

(thay thế [core name]bằng tên của lõi bạn muốn xóa). Hoặc sử dụng điều này nếu đăng dữ liệu dữ liệu xml dữ liệu:

<delete><query>*:*</query></delete>

Hãy chắc chắn rằng bạn sử dụng commit=trueđể thực hiện các thay đổi

Tuy nhiên, không có nhiều ý tưởng với việc xóa dữ liệu hbase.


7
lõi là cần thiết nếu bạn đang sử dụng thiết lập đa lõi.
Jayendra

1
Câu trả lời này thảo luận về cách xóa tất cả các bảng trong hbase: stackoverflow.com/questions/3990952/… . Nếu bạn chỉ muốn xóa dữ liệu trong bảng, bạn có thể cắt bớt chúng thay vì bỏ chúng.
codingFoo

nó chỉ xóa chỉ mục? hoặc nó cũng sẽ xóa dữ liệu thực?
vishnu viswanath

6
Bạn có thể muốn thêm &commit=truevào truy vấn để nó trở thành http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueNếu không có nó Tôi đã tự hỏi tại sao tất cả các tài liệu không bị xóa.
chris544,

2
Nó không hoạt động. Tôi nhận được: HTTP ERROR 404 Sự cố khi truy cập / solr / update. Lý do: Không tìm thấy từ Solr ...
Stepan Yakovenko

91

Tôi đã sử dụng yêu cầu này để xóa tất cả hồ sơ của mình nhưng đôi khi cần phải cam kết điều này.

Đối với điều đó, hãy thêm &commit=truevào yêu cầu của bạn:

http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true

11

Bạn có thể sử dụng các lệnh sau để xóa. Sử dụng truy vấn "khớp với tất cả tài liệu" trong lệnh xóa bằng truy vấn:

'<delete><query>*:*</query></delete>

Bạn cũng phải cam kết sau khi chạy xóa, để làm trống chỉ mục, hãy chạy hai lệnh sau:

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

Một chiến lược khác là thêm hai dấu trang trong trình duyệt của bạn:

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>


Nguồn tài liệu từ SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

Đăng dữ liệu json (ví dụ: với curl)

curl -X POST -H 'Content-Type: application/json' \
    'http://<host>:<port>/solr/<core>/update?commit=true' \
    -d '{ "delete": {"query":"*:*"} }'

8

Nếu bạn muốn xóa tất cả dữ liệu trong Solr thông qua SolrJ, hãy làm như thế này.

public static void deleteAllSolrData() {
    HttpSolrServer solr = new HttpSolrServer("http://localhost:8080/solr/core/");
    try {
      solr.deleteByQuery("*:*");
    } catch (SolrServerException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    } catch (IOException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    }
}

Nếu bạn muốn xóa tất cả dữ liệu trong HBase, hãy làm như thế này.

public static void deleteHBaseTable(String tableName, Configuration conf) {
    HBaseAdmin admin = null;    
    try {
        admin = new HBaseAdmin(conf);
        admin.disableTable(tableName);
        admin.deleteTable(tableName);
    } catch (MasterNotRunningException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (ZooKeeperConnectionException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (IOException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } finally {
        close(admin);
    }
 }

4

Sử dụng truy vấn "khớp với tất cả tài liệu" trong lệnh xóa bằng truy vấn ::

Bạn cũng phải cam kết sau khi chạy xóa, để làm trống chỉ mục, hãy chạy hai lệnh sau:

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'

curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

Hoạt động tốt với <core>được xác định trong url. Tôi đã chỉnh sửa câu trả lời.
Achala Dissanayake

4

Từ dòng lệnh sử dụng:

 bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'

3

Tôi đến đây để xóa tất cả tài liệu khỏi phiên bản solr thông qua .Net framework bằng SolrNet. Đây là cách tôi có thể làm điều đó:

Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
    ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();

Điều này đã xóa tất cả các tài liệu. (Tôi không chắc liệu có thể khôi phục điều này hay không, tôi đang trong giai đoạn tìm hiểu và thử nghiệm Solr, vì vậy hãy cân nhắc sao lưu trước khi sử dụng mã này)


Điều này rất hữu ích. Cảm ơn bạn !
Karan

3

kích hoạt cái này trong trình duyệt

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true lệnh này sẽ xóa tất cả các tài liệu trong chỉ mục trong solr


Nếu bạn có thể vui lòng chỉnh sửa câu trả lời của mình và giải thích mã bạn đang hiển thị có tác dụng gì và tại sao / cách mã đó trả lời câu hỏi, nó thực sự có thể hữu ích.
Lea Cohen

câu trả lời trên là ok bây giờ ..?
bittu

Nó chắc chắn được hiểu nhiều hơn :).
Lea Cohen

2

Tôi đã sử dụng truy vấn này để xóa tất cả các bản ghi của mình.

http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true

2

Tôi đã thử các bước dưới đây. Nó hoạt động tốt.

  • Hãy đảm bảo rằng máy chủ SOLR mà nó đang chạy
  • Chỉ cần nhấp vào liên kết Xóa tất cả dữ liệu SOLR sẽ truy cập và xóa tất cả dữ liệu được lập chỉ mục SOLR của bạn, sau đó bạn sẽ nhận được các chi tiết sau trên màn hình dưới dạng đầu ra.

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
  • nếu bạn không nhận được kết quả trên thì hãy đảm bảo những điều sau.

    • Tôi đã sử dụng mặc định host(localhost) và port(8080) trên liên kết trên. vui lòng thay đổi máy chủ và cổng nếu nó khác với cuối cùng của bạn.
    • Tên lõi mặc định phải là collection/ collection1. Tôi đã sử dụng collection1trong liên kết trên. vui lòng thay đổi nó quá nếu tên chính của bạn khác.

1

Nếu bạn cần xóa tất cả dữ liệu, việc tạo lại bộ sưu tập có thể nhanh hơn, ví dụ:

solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1

1

Các ví dụ về curl ở trên đều không thành công đối với tôi khi tôi chạy chúng từ một thiết bị đầu cuối cygwin. Đã xảy ra lỗi như thế này khi tôi chạy ví dụ tập lệnh.

curl http://192.168.2.20:7773/solr/CORE1/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>
<!-- 
     It looks like it deleted stuff, but it did not go away
     maybe because the committing call failed like so 
-->
curl http://192.168.1.2:7773/solr/CORE1/update --data-binary '' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">400</int><int name="QTime">2</int></lst><lst name="error"><str name="msg">Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]</str><int name="code">400</int></lst>
</response>

Tôi cần sử dụng tính năng xóa trong một vòng lặp trên các tên lõi để xóa sạch tất cả chúng trong một dự án.

Truy vấn dưới đây phù hợp với tôi trong tập lệnh đầu cuối Cygwin.

curl http://192.168.1.2:7773/hpi/CORE1/update?stream.body=<delete><query>*:*</query></delete>&commit=true
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>

Một dòng này khiến dữ liệu biến mất và thay đổi vẫn tiếp diễn.


1

Solr Tôi không chắc chắn nhưng bạn có thể xóa tất cả dữ liệu khỏi hbase bằng cách sử dụng lệnh truncate như dưới đây:

truncate 'table_name'

Nó sẽ xóa tất cả các khóa hàng khỏi bảng hbase.



0

Tôi đã tạo dấu trang JavaScript để thêm liên kết xóa trong giao diện người dùng quản trị Solr

javascript: (function() {
    var str, $a, new_href, href, upd_str = 'update?stream.body=<delete><query>*:*</query></delete>&commit=true';
    $a = $('#result a#url');
    href = $a.attr('href');
    str = href.match('.+solr\/.+\/(.*)')[1];
    new_href = href.replace(str, upd_str);
    $('#result').prepend('<a id="url_upd" class="address-bar" href="' + new_href + '"><strong>DELETE ALL</strong>   ' + new_href + '</a>');
})();

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


0

Nếu bạn đang sử dụng Cloudera 5.x, Ở đây trong tài liệu này được đề cập rằng Lily cũng duy trì các cập nhật và xóa theo thời gian thực.

Định cấu hình Dịch vụ trình lập chỉ mục NRT Lily HBase để sử dụng với Tìm kiếm Cloudera

Vì HBase áp dụng chèn, cập nhật và xóa cho các ô bảng HBase, trình chỉ mục giữ Solr nhất quán với nội dung bảng HBase, sử dụng bản sao HBase tiêu chuẩn.

Không chắc chắn nếu truncate 'hTable'cũng được hỗ trợ trong cùng một.

Nếu không, bạn tạo Trình kích hoạt hoặc Dịch vụ để xóa dữ liệu của mình khỏi cả Solr và HBase trên một Sự kiện cụ thể hoặc bất kỳ thứ gì.


0

Để xóa tất cả các tài liệu của bộ sưu tập Solr, bạn có thể sử dụng yêu cầu sau:

curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update

Nó sử dụng phần thân JSON.


Như đã chỉ ra bởi những người khác, nó có lẽ tốt hơn để sử dụng /update?commit=true. Bản thân phần thân yêu cầu JSON hoạt động tuyệt vời :)
Frederick Zhang
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.