guide - solr xls
Cómo eliminar todos los datos de solr y hbase (15)
Al borrar un índice de Solr, también debe hacer una confirmación y optimizar después de ejecutar la consulta de eliminación de todo. Se requieren pasos completos (curl es todo lo que necesita): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
¿Cómo solr
todos los datos de solr
por comando? Estamos usando solr
con lily
y hbase
.
¿Cómo puedo eliminar datos de hbase y solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Datos de json de publicación (p. Ej. Con curl)
curl -X POST -H ''Content-Type: application/json'' /
''http://<host>:<port>/solr/<core>/update?commit=true'' /
-d ''{ "delete": {"query":"*:*"} }''
He usado esta consulta para eliminar todos mis registros.
http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true
He utilizado esta solicitud para eliminar todos mis registros, pero a veces es necesario confirmar esto.
Para eso, agrega &commit=true
a tu solicitud:
http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Hice un marcador de JavaScript que agrega el enlace de eliminación en 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>'');
})();
Los ejemplos curl ante todo fallaron cuando los ejecuté desde un terminal cygwin. Hubo errores como este cuando ejecuté el ejemplo del 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>
Necesitaba usar la eliminación en un bucle en los nombres de los núcleos para eliminarlos por completo en un proyecto.
Esta consulta a continuación funcionó para mí en el script de terminal de 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>
Esta línea hizo desaparecer los datos y el cambio persistió.
Puede usar los siguientes comandos para eliminar. Use la consulta "hacer coincidir todos los documentos" en un comando eliminar por consulta:
''<delete><query>*:*</query></delete>
También debe confirmar después de ejecutar la eliminación, de modo que, para vaciar el índice, ejecute los dos comandos siguientes:
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''
Otra estrategia sería agregar dos marcadores en su navegador:
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>
Documentos fuente de SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F
Si desea eliminar todos los datos en Solr a través de SolrJ, haga algo como esto.
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);
}
}
Si desea eliminar todos los datos en HBase, haga algo como esto.
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);
}
}
Si está utilizando Cloudera 5.x, aquí en esta documentación se menciona que Lily también mantiene las eliminaciones y las eliminaciones en tiempo real.
Configuración del servicio indexador NRT Lily HBase para su uso con Cloudera Search
A medida que HBase aplica inserciones, actualizaciones y eliminaciones a las celdas de la tabla HBase, el indexador mantiene Solr en consonancia con el contenido de la tabla HBase, utilizando la replicación HBase estándar.
No estoy seguro si truncate ''hTable''
también es compatible en el mismo.
De lo contrario, puede crear un Disparador o Servicio para borrar sus datos tanto de Solr como de HBase en un Evento en particular o cualquier otra cosa.
Si necesita limpiar todos los datos, podría ser más rápido volver a crear la colección, por ejemplo
solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1
Si quiere limpiar el índice Solr -
puedes disparar http url -
http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true
(reemplace [core name]
con el nombre del núcleo del que desea eliminar). O use esto si publica datos xml de datos:
<delete><query>*:*</query></delete>
Asegúrate de utilizar commit=true
para confirmar los cambios
No tengo mucha idea con la eliminación de datos hbase.
Solr No estoy seguro, pero puede eliminar todos los datos de hbase utilizando el comando truncar como se muestra a continuación:
truncate ''table_name''
Eliminará todas las claves de fila de la tabla hbase.
Utilice la consulta "hacer coincidir todos los documentos" en un comando de eliminar por consulta :
También debe confirmar después de ejecutar la eliminación, de modo que, para vaciar el índice, ejecute los dos comandos siguientes:
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''
Vine aquí buscando eliminar todos los documentos de la instancia de solr a través de .Net framework usando SolrNet. Así es como pude hacerlo:
Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();
Esto ha borrado todos los documentos. (No estoy seguro de si esto podría recuperarse, estoy en fase de aprendizaje y prueba de Solr, así que considere realizar una copia de seguridad antes de usar este código)
dispara esto en el navegador
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true
esta commmand eliminará todos los documentos en índice en solr