So löschen Sie alle Daten aus solr und hbase


Antworten:


190

Wenn Sie den Solr-Index bereinigen möchten -

Sie können http url feuern -

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

(Ersetzen Sie ihn [core name]durch den Namen des Kerns, aus dem Sie löschen möchten). Oder verwenden Sie diese Option, wenn Sie XML-Daten veröffentlichen:

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

Stellen Sie sicher, dass Sie commit=truedie Änderungen festschreiben

Ich habe jedoch keine Ahnung, wie man hbase-Daten löscht.


7
Kern wird benötigt, wenn Sie Multicore-Setup verwenden.
Jayendra

1
In dieser Antwort wird erläutert, wie alle Tabellen in hbase gelöscht werden: stackoverflow.com/questions/3990952/… . Wenn Sie nur die Daten in der Tabelle löschen möchten, können Sie sie abschneiden, anstatt sie zu löschen.
CodingFoo

löscht es nur den Index? oder werden auch die realen Daten gelöscht?
Vishnu Viswanath

6
Vielleicht möchten Sie &commit=trueder Abfrage hinzufügen , damit sie wird. http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueOhne sie habe ich mich gefragt, warum nicht alle Dokumente entfernt wurden.
Chris544

2
Es funktioniert nicht. Ich erhalte: HTTP ERROR 404 Problem beim Zugriff auf / solr / update. Grund: Nicht gefunden von solr ...
Stepan

91

Ich habe diese Anfrage verwendet, um alle meine Datensätze zu löschen, aber manchmal ist es notwendig, dies festzuschreiben.

Fügen Sie &commit=truedazu Ihrer Anfrage hinzu:

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

11

Sie können die folgenden Befehle zum Löschen verwenden. Verwenden Sie die Abfrage "Alle Dokumente abgleichen" in einem Befehl zum Löschen nach Abfrage:

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

Sie müssen auch nach dem Ausführen des Löschvorgangs einen Commit ausführen. Um den Index zu leeren, führen Sie die folgenden zwei Befehle aus:

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'

Eine andere Strategie wäre, zwei Lesezeichen in Ihren Browser einzufügen:

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


Quelldokumente von SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

Post json Daten (zB mit Curl)

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

8

Wenn Sie alle Daten in Solr über SolrJ löschen möchten, gehen Sie wie folgt vor.

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

Wenn Sie alle Daten in HBase löschen möchten, gehen Sie wie folgt vor.

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

Verwenden Sie die „entsprechen alle docs“ Abfrage in einer Lösch durch Abfragebefehl: :

Sie müssen auch nach dem Ausführen des Löschvorgangs einen Commit ausführen. Um den Index zu leeren, führen Sie die folgenden zwei Befehle aus:

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'

Funktionierte gut mit <core>in der URL definiert. Ich habe die Antwort bearbeitet.
Achala Dissanayake

4

Verwenden Sie in der Befehlszeile:

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

3

Ich bin hierher gekommen, um alle Dokumente aus der solr-Instanz über das .NET-Framework mit SolrNet zu löschen. So konnte ich es machen:

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

Dies hat alle Dokumente gelöscht. (Ich bin nicht sicher, ob dies wiederhergestellt werden kann. Ich bin in der Lern- und Testphase von Solr. Bitte ziehen Sie eine Sicherung in Betracht, bevor Sie diesen Code verwenden.)


Das ist sehr nützlich. Danke !
Karan

3

Feuern Sie dies im Browser ab

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true Dieser Befehl löscht alle Dokumente im Index in Solr


Wenn Sie bitte Ihre Antwort bearbeiten und erklären könnten, was der angezeigte Code bewirkt und warum / wie dieser Code die Frage beantwortet, könnte dies wirklich helfen.
Lea Cohen

Ist die obige Antwort jetzt in Ordnung?
Bittu

Es ist sicherlich besser verstanden :).
Lea Cohen

2

Ich habe diese Abfrage verwendet, um alle meine Datensätze zu löschen.

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

2

Ich habe die folgenden Schritte ausprobiert. Es funktioniert gut.

  • Bitte stellen Sie sicher, dass der SOLR-Server ausgeführt wird
  • Klicken Sie einfach auf den Link Alle SOLR-Daten löschen, die alle Ihre SOLR-indizierten Daten treffen und löschen. Anschließend werden die folgenden Details als Ausgabe auf dem Bildschirm angezeigt.

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
  • Wenn Sie die obige Ausgabe nicht erhalten, stellen Sie bitte Folgendes sicher.

    • Ich habe die Standardeinstellungen host(localhost) und port(8080) für den obigen Link verwendet. Bitte ändern Sie den Host und den Port, wenn es an Ihrem Ende anders ist.
    • Der Standardkernname sollte collection/ sein collection1. Ich habe collection1im obigen Link verwendet. Bitte ändern Sie es auch, wenn Ihr Kernname anders ist.

1

Wenn Sie alle Daten bereinigen müssen, ist es möglicherweise schneller, die Sammlung neu zu erstellen, z

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

1

Vor allem die Curl-Beispiele sind für mich fehlgeschlagen, als ich sie von einem Cygwin-Terminal aus ausgeführt habe. Es gab Fehler wie diesen, als ich das Skriptbeispiel ausführte.

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>

Ich musste das Löschen in einer Schleife für Kernnamen verwenden, um sie alle in einem Projekt zu löschen.

Diese Abfrage unten hat für mich im Cygwin-Terminal-Skript funktioniert.

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>

Diese eine Zeile ließ die Daten verschwinden und die Änderung blieb bestehen.


1

Solr Ich bin mir nicht sicher, aber Sie können alle Daten aus hbase mit dem Befehl truncate wie folgt löschen:

truncate 'table_name'

Es werden alle Zeilenschlüssel aus der hbase-Tabelle gelöscht.



0

Ich habe ein JavaScript-Lesezeichen erstellt, das den Löschlink in der Solr Admin-Benutzeroberfläche hinzufügt

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

Geben Sie hier die Bildbeschreibung ein


0

Wenn Sie Cloudera 5.x verwenden, wird hier in dieser Dokumentation erwähnt, dass Lily auch die Echtzeit-Aktualisierungen und -Löschungen verwaltet.

Konfigurieren des Lily HBase NRT-Indexerdienstes für die Verwendung mit Cloudera Search

Da HBase Einfügungen, Aktualisierungen und Löschungen auf HBase-Tabellenzellen anwendet, hält der Indexer Solr mithilfe der Standard-HBase-Replikation mit dem Inhalt der HBase-Tabelle konsistent.

Nicht sicher, obtruncate 'hTable' auch unterstützt wird.

Andernfalls erstellen Sie einen Trigger oder Service, um Ihre Daten von Solr und HBase für ein bestimmtes Ereignis oder etwas anderes zu löschen.


0

Um alle Dokumente einer Solr-Sammlung zu löschen, können Sie diese Anforderung verwenden:

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

Es verwendet JSON-Body.


Wie von anderen betont, ist es wahrscheinlich besser zu verwenden /update?commit=true. Der JSON-Anfragetext selbst funktioniert hervorragend :)
Frederick Zhang
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.