Come si eliminano tutti i dati solr
da un comando? Stiamo usando solr
con lily
e hbase
.
Come posso eliminare i dati sia da hbase che da solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Come si eliminano tutti i dati solr
da un comando? Stiamo usando solr
con lily
e hbase
.
Come posso eliminare i dati sia da hbase che da solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Risposte:
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=true
per eseguire il commit delle modifiche
Tuttavia, non hai molta idea di cancellare i dati di hbase.
&commit=true
alla query in modo che diventi http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Senza di essa Mi chiedevo perché tutti i documenti non sono stati rimossi.
È 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
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);
}
}
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'
<core>
definito nell'URL. Ho modificato la risposta.
Dalla riga di comando usa:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
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)
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
Ho provato i passaggi seguenti. Funziona bene.
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.
host
(localhost) e port
(8080) sul link sopra. si prega di modificare l'host e la porta se è diverso da parte tua.collection
/ collection1
. Ho usato collection1
nel link sopra. per favore cambialo anche se il tuo nome principale è diverso.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.
Quando si cancella un indice Solr, è necessario eseguire anche un commit e ottimizzare dopo aver eseguito la query di eliminazione tutto. Passaggi completi richiesti (curl è tutto ciò di cui hai bisogno): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
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>');
})();
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.
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.
/update?commit=true
. Il corpo della richiesta JSON stesso funziona alla grande :)