วิธีลบข้อมูลทั้งหมดจาก solr และ hbase


คำตอบ:


194

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

คุณสามารถเรียกใช้ http url -

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

(แทนที่[core name]ด้วยชื่อแกนที่คุณต้องการลบ) หรือใช้สิ่งนี้หากโพสต์ข้อมูล xml ข้อมูล:

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

อย่าลืมใช้commit=trueเพื่อยืนยันการเปลี่ยนแปลง

ไม่มีความคิดมากกับการล้างข้อมูล hbase


7
จำเป็นต้องมีแกนหลักหากคุณใช้การตั้งค่ามัลติคอร์
Jayendra

1
คำตอบนี้กล่าวถึงวิธีการลบตารางทั้งหมดใน HBase: stackoverflow.com/questions/3990952/... หากคุณต้องการเพียงแค่ลบข้อมูลในตารางคุณสามารถตัดทอนข้อมูลเหล่านั้นแทนการปล่อยทิ้งได้
codingFoo

มันลบดัชนีเท่านั้นหรือ หรือจะลบข้อมูลจริงด้วย?
วิษณุทัศนนาถ

6
คุณอาจต้องการเพิ่ม&commit=trueในแบบสอบถามเพื่อให้มันกลายเป็นhttp://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueถ้าไม่มีฉันก็สงสัยว่าทำไมเอกสารทั้งหมดจึงไม่ถูกลบออก
chris544

2
มันใช้ไม่ได้ ฉันได้รับ: HTTP ERROR 404 ปัญหาในการเข้าถึง / solr / update เหตุผล: ไม่พบจาก solr ...
Stepan Yakovenko

91

ฉันใช้คำขอนี้เพื่อลบบันทึกทั้งหมดของฉัน แต่บางครั้งก็จำเป็นต้องยอมรับสิ่งนี้

สำหรับสิ่งนั้นเพิ่ม&commit=trueในคำขอของคุณ:

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

12

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบ ใช้คิวรี "ตรงกับเอกสารทั้งหมด" ในคำสั่งลบด้วยคิวรี:

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

คุณต้องคอมมิตหลังจากรันการลบดังนั้นหากต้องการล้างดัชนีให้รันคำสั่งสองคำสั่งต่อไปนี้:

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'

อีกกลยุทธ์หนึ่งคือการเพิ่มบุ๊คมาร์คสองรายการในเบราว์เซอร์ของคุณ:

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


เอกสารที่มาจาก SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F



8

หากคุณต้องการลบข้อมูลทั้งหมดใน Solr ผ่าน SolrJ ให้ทำสิ่งนี้

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);
    }
}

หากคุณต้องการลบข้อมูลทั้งหมดใน HBase ให้ทำดังนี้

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

ใช้คิวรี "ตรงกับเอกสารทั้งหมด" ในคำสั่งลบด้วยคิวรี:

คุณต้องคอมมิตหลังจากรันการลบดังนั้นหากต้องการล้างดัชนีให้รันคำสั่งสองคำสั่งต่อไปนี้:

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>กำหนดไว้ใน url ฉันแก้ไขคำตอบ
Achala Dissanayake


3

ฉันมาที่นี่เพื่อต้องการลบเอกสารทั้งหมดจากอินสแตนซ์ solr ผ่าน. Net framework โดยใช้ SolrNet นี่คือวิธีที่ฉันสามารถทำได้:

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

นี่เคลียร์เอกสารทั้งหมดแล้ว (ฉันไม่แน่ใจว่าจะสามารถกู้คืนได้หรือไม่ฉันอยู่ในช่วงการเรียนรู้และทดสอบของ Solr ดังนั้นโปรดพิจารณาการสำรองข้อมูลก่อนใช้รหัสนี้)


สิ่งนี้มีประโยชน์มาก ขอบคุณ !
Karan

3

เริ่มการทำงานนี้ในเบราว์เซอร์

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true คำสั่งนี้จะลบเอกสารทั้งหมดในดัชนีใน solr


หากคุณสามารถแก้ไขคำตอบของคุณและอธิบายว่าโค้ดที่คุณแสดงนั้นใช้ทำอะไรได้บ้างและทำไม / รหัสนั้นตอบคำถามได้อย่างไรมันช่วยได้มาก
Lea Cohen

คำตอบข้างบนตกลงตอนนี้หรือเปล่า .. ?
bittu

เข้าใจมากขึ้นอย่างแน่นอน :)
Lea Cohen

3

ฉันใช้คำค้นหานี้เพื่อลบบันทึกทั้งหมดของฉัน

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

2

ฉันลองทำตามขั้นตอนด้านล่างแล้ว มันทำงานได้ดี

  • โปรดตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ SOLR ทำงานอยู่
  • เพียงคลิกที่ลิงค์ลบข้อมูล SOLR ทั้งหมดซึ่งจะตีและลบข้อมูลที่ทำดัชนี SOLR ทั้งหมดของคุณจากนั้นคุณจะได้รับรายละเอียดต่อไปนี้บนหน้าจอเป็นผลลัพธ์

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
    
  • หากคุณไม่ได้รับผลลัพธ์ข้างต้นโปรดตรวจสอบสิ่งต่อไปนี้

    • ฉันใช้ค่าเริ่มต้นhost(localhost) และport(8080) ที่ลิงค์ด้านบน โปรดเปลี่ยนโฮสต์และพอร์ตหากส่วนท้ายของคุณแตกต่างกัน
    • ชื่อหลักเริ่มต้นควรจะ/collection collection1ฉันใช้collection1ในลิงค์ด้านบน โปรดเปลี่ยนด้วยหากชื่อหลักของคุณแตกต่างกัน

1

หากคุณต้องการล้างข้อมูลทั้งหมดการสร้างคอลเล็กชันใหม่อาจเร็วกว่าเช่น

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

1

ตัวอย่าง curl ข้างต้นล้มเหลวสำหรับฉันเมื่อฉันเรียกใช้จากเครื่อง cygwin มีข้อผิดพลาดเช่นนี้เมื่อฉันรันตัวอย่างสคริปต์

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>

ฉันจำเป็นต้องใช้การลบในวงในชื่อแกนเพื่อล้างทั้งหมดในโปรเจ็กต์

แบบสอบถามด้านล่างนี้ใช้ได้กับฉันในสคริปต์เทอร์มินัล 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>

บรรทัดเดียวนี้ทำให้ข้อมูลหายไปและการเปลี่ยนแปลงยังคงอยู่


1

หากคุณกำลังใช้ Cloudera 5.x ในเอกสารนี้มีการกล่าวถึงว่า Lily จะทำการอัปเดตและลบแบบเรียลไทม์ด้วย

การกำหนดค่าบริการ Lily HBase NRT Indexer สำหรับใช้กับ Cloudera Search

เนื่องจาก HBase ใช้การแทรกอัพเดตและลบกับเซลล์ตาราง HBase ตัวสร้างดัชนีจะทำให้ Solr สอดคล้องกับเนื้อหาตาราง HBase โดยใช้การจำลองแบบ HBase มาตรฐาน

ไม่แน่ใจว่าtruncate 'hTable'ยังรองรับแบบเดียวกัน

มิฉะนั้นคุณจะสร้างทริกเกอร์หรือบริการเพื่อล้างข้อมูลของคุณจากทั้ง Solr และ HBase ในเหตุการณ์เฉพาะหรืออะไรก็ได้


1

หากต้องการลบเอกสารทั้งหมดของคอลเลกชัน Solr คุณสามารถใช้คำขอนี้:

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

ใช้เนื้อความ JSON


/update?commit=trueเป็นแหลมออกโดยคนอื่นก็อาจจะดีกว่าที่จะใช้ เนื้อหาคำขอ JSON นั้นใช้งานได้ดี :)
Frederick Zhang


0

ฉันสร้างบุ๊กมาร์ก JavaScript ซึ่งเพิ่มลิงก์ลบใน Solr Admin UI

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>');
})();

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


0

Solr ฉันไม่แน่ใจ แต่คุณสามารถลบข้อมูลทั้งหมดจาก hbase โดยใช้คำสั่ง truncate ดังต่อไปนี้:

truncate 'table_name'

มันจะลบคีย์แถวทั้งหมดจากตาราง hbase

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