Làm cách nào để xóa tất cả dữ liệu khỏi solr
bằng lệnh? Chúng tôi đang sử dụng solr
với lily
và hbase
.
Làm cách nào để xóa dữ liệu khỏi cả hbase và solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Làm cách nào để xóa tất cả dữ liệu khỏi solr
bằng lệnh? Chúng tôi đang sử dụng solr
với lily
và hbase
.
Làm cách nào để xóa dữ liệu khỏi cả hbase và solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Câu trả lời:
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.
&commit=true
vào truy vấn để nó trở thành http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Nế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.
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
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);
}
}
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'
<core>
được xác định trong url. Tôi đã chỉnh sửa câu trả lời.
Từ dòng lệnh sử dụng:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
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)
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
Tôi đã thử các bước dưới đây. Nó hoạt động tốt.
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.
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.collection
/ collection1
. Tôi đã sử dụng collection1
trong 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.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.
Khi xóa chỉ mục Solr, bạn cũng nên thực hiện cam kết và tối ưu hóa sau khi chạy truy vấn xóa tất cả. Yêu cầu đầy đủ các bước (curl là tất cả những gì bạn cần): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
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>');
})();
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ì.
Để 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.
/update?commit=true
. Bản thân phần thân yêu cầu JSON hoạt động tuyệt vời :)