Come eliminare tutti i dati da solr e hbase


Risposte:


190

Se vuoi ripulire l'indice Solr -

puoi attivare l'URL http -

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

(sostituire [core name]con il nome del core da cui si desidera eliminare). Oppure usalo se pubblichi dati xml:

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

Assicurati di utilizzare commit=trueper eseguire il commit delle modifiche

Tuttavia, non hai molta idea di cancellare i dati di hbase.


7
core è necessario se si utilizza la configurazione multicore.
Jayendra

1
Questa risposta discute come eliminare tutte le tabelle HBase: stackoverflow.com/questions/3990952/... . Se desideri semplicemente eliminare i dati nella tabella, puoi troncarli anziché rilasciarli.
codificaFoo

cancella solo l'indice? o cancellerà anche i dati reali?
vishnu viswanath

6
Potresti voler aggiungere &commit=truealla query in modo che diventi http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueSenza di essa Mi chiedevo perché tutti i documenti non sono stati rimossi.
chris544

2
Non funziona. Ottengo: HTTP ERROR 404 Problema di accesso a / solr / update. Motivo: non trovato da solr ...
Stepan Yakovenko

91

Ho utilizzato questa richiesta per eliminare tutti i miei record, ma a volte è necessario eseguire il commit.

Per questo, aggiungi &commit=truealla tua richiesta:

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

11

È possibile utilizzare i seguenti comandi per eliminare. Utilizza la query "corrisponde a tutti i documenti" in un comando Elimina per query:

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

È inoltre necessario eseguire il commit dopo aver eseguito l'eliminazione quindi, per svuotare l'indice, eseguire i seguenti due comandi:

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'

Un'altra strategia potrebbe essere quella di aggiungere due segnalibri nel tuo browser:

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


Documenti di origine da SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

Pubblica dati json (ad es. Con curl)

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

8

Se vuoi eliminare tutti i dati in Solr tramite SolrJ, fai qualcosa del genere.

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

Se vuoi eliminare tutti i dati in HBase, fai qualcosa del genere.

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

Utilizza la query "corrisponde a tutti i documenti" in un comando Elimina per query :

È inoltre necessario eseguire il commit dopo aver eseguito l'eliminazione quindi, per svuotare l'indice, eseguire i seguenti due comandi:

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'

Ha funzionato bene con <core>definito nell'URL. Ho modificato la risposta.
Achala Dissanayake

4

Dalla riga di comando usa:

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

3

Sono venuto qui cercando di eliminare tutti i documenti dall'istanza di solr attraverso il framework .Net usando SolrNet. Ecco come sono riuscito a farlo:

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

Questo ha cancellato tutti i documenti. (Non sono sicuro che questo possa essere ripristinato, sono in fase di apprendimento e test di Solr, quindi considera il backup prima di utilizzare questo codice)


Questo è molto utile. Grazie !
Karan

3

sparalo nel browser

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true questo comando cancellerà tutti i documenti in index in solr


Se potessi modificare la tua risposta e spiegare cosa fa il codice che stai mostrando e perché / come quel codice risponde alla domanda, potrebbe davvero aiutare.
Lea Cohen

la risposta di cui sopra è ok ora ..?
bittu

È sicuramente più compreso :).
Lea Cohen

2

Ho utilizzato questa query per eliminare tutti i miei record.

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

2

Ho provato i passaggi seguenti. Funziona bene.

  • Assicurati che il server SOLR sia in esecuzione
  • Basta fare clic sul collegamento Elimina tutti i dati SOLR che colpirà ed eliminerà tutti i tuoi dati indicizzati SOLR, quindi otterrai i seguenti dettagli sullo schermo come output.

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
  • se non si ottiene l'output di cui sopra, assicurarsi di quanto segue.

    • Ho usato il valore predefinito host(localhost) e port(8080) sul link sopra. si prega di modificare l'host e la porta se è diverso da parte tua.
    • Il nome del core predefinito dovrebbe essere collection/ collection1. Ho usato collection1nel link sopra. per favore cambialo anche se il tuo nome principale è diverso.

1

Se è necessario ripulire tutti i dati, potrebbe essere più veloce ricreare la raccolta, ad es

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

1

Gli esempi di curl soprattutto non sono riusciti per me quando li ho eseguiti da un terminale cygwin. Si sono verificati errori come questo quando ho eseguito l'esempio di script.

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>

Avevo bisogno di utilizzare l'eliminazione in un ciclo sui nomi principali per cancellarli tutti in un progetto.

Questa query di seguito ha funzionato per me nello script del terminale 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>

Questa riga ha eliminato i dati e il cambiamento è persistito.


1

Solr Non sono sicuro ma puoi eliminare tutti i dati da hbase usando il comando truncate come di seguito:

truncate 'table_name'

Eliminerà tutte le chiavi di riga dalla tabella hbase.



0

Ho creato un segnalibro JavaScript che aggiunge il collegamento di eliminazione nell'interfaccia utente di amministrazione di 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>');
})();

inserisci qui la descrizione dell'immagine


0

Se stai usando Cloudera 5.x, qui in questa documentazione è menzionato che Lily mantiene anche gli aggiornamenti e le cancellazioni in tempo reale.

Configurazione del servizio indicizzatore Lily HBase NRT per l'uso con Cloudera Search

Poiché HBase applica inserimenti, aggiornamenti ed eliminazioni alle celle della tabella HBase, l'indicizzatore mantiene Solr coerente con il contenuto della tabella HBase, utilizzando la replica HBase standard.

Non sono sicuro se truncate 'hTable'è supportato anche nello stesso.

Altrimenti crei un trigger o un servizio per cancellare i tuoi dati sia da Solr che da HBase su un particolare evento o altro.


0

Per eliminare tutti i documenti di una raccolta Solr, puoi utilizzare questa richiesta:

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

Usa il corpo JSON.


Come sottolineato da altri, probabilmente è meglio usare /update?commit=true. Il corpo della richiesta JSON stesso funziona alla grande :)
Frederick Zhang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.