2011-10-11 18 views

risposta

141

Se si vuole pulire indice Solr -

si può sparare http url -

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

(sostituzione [core name] con il nome del nucleo che si desidera cancellare da) . Oppure utilizzare questo se la pubblicazione dei dati di dati xml:

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

essere sicuri di utilizzare commit=true per confermare le modifiche

Non hanno molta idea con la cancellazione dei dati HBase però.

+7

nucleo è necessario se si utilizza l'installazione multicore. – Jayendra

+1

Questa risposta spiega come eliminare tutte le tabelle in hbase: http://stackoverflow.com/questions/3990952/a-script-that-deletes-all-tables-in-hbase. Se si desidera solo eliminare i dati nella tabella, è possibile troncarli anziché rilasciarli. – codingFoo

+0

elimina solo l'indice? o cancellerà anche i dati reali? –

88

Ho usato questa richiesta per cancellare tutti i miei record ma a volte è necessario commetterlo.

Per questo, aggiungi &commit=true alla vostra richiesta:

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

Se si desidera eliminare tutti i dati in Solr via SolrJ fare qualcosa di simile.

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 si desidera eliminare tutti i dati in HBase, fare qualcosa di simile.

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

Sono venuto qui cercando di cancellare tutti i documenti dall'istanza solr attraverso .Net framework usando SolrNet. Ecco come sono stato in grado di 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 se questo potrebbe essere recuperato, io sono per l'apprendimento e la fase di Solr test, quindi perche non di backup prima di utilizzare questo codice)

+0

Questo è molto utile. Grazie ! – Karan

3

fuoco nel browser

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true , questo comando sarà elimina tutti i documenti nell'indice in solr

+0

Se potessi, per favore, modifica la tua risposta e spiega cosa fa il codice che stai mostrando, e perché/come quel codice risponde alla domanda, potrebbe davvero aiutare. –

+0

è la risposta sopra ok ora ..? – bittu

+0

È sicuramente più comprensibile :). –

1

Se è necessario eliminare 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 
3

utilizzare la funzione "abbinare tutti i documenti" query in una eliminazione dal comando query: :

È inoltre necessario impegnarsi dopo aver eseguito la cancellazione così, per svuotare l'indice, eseguire i seguenti 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' 
0

ho fatto un segnalibro JavaScript che aggiunge il link di cancellazione in 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>'); 
 
})();

enter image description here

7

È possibile utilizzare i seguenti comandi per eliminare. Utilizzare il "match tutti i documenti" query in una eliminazione dal comando query:

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

È inoltre necessario impegnarsi dopo aver eseguito l'eliminazione in modo, per svuotare l'indice, eseguire i seguenti 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 browser:

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


documenti fonte da SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/10148166) – Jost

1

ho usato questa query per eliminare tutti i miei dischi.

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

Gli esempi ricciolo soprattutto fallito per me quando mi sono imbattuto da un terminale Cygwin. C'erano 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 usare 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 fatto sparire i dati e il cambiamento persisteva.

0

Se si utilizza Cloudera 5.x, in questa documentazione viene menzionato che Lily mantiene anche gli aggiornamenti e le eliminazioni in tempo reale.

Configuring the Lily HBase NRT Indexer Service for Use with Cloudera Search

Come HBase applica inserimenti, aggiornamenti ed elimina a celle HBase, l'indicizzatore mantiene Solr coerente con il contenuto della tabella HBase, utilizzando replica normale HBase.

Non sono sicuro che lo stesso sia anche truncate 'hTable'.

Altrimenti si crea un trigger o un servizio per cancellare i dati sia da Solr che da HBase in un particolare evento o altro.

2

dati Messaggio JSON (per esempio con l'arricciatura)

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