Como excluo todos os dados solr
por comando? Estamos usando solr
com lily
e hbase
.
Como posso excluir dados de hbase e solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Como excluo todos os dados solr
por comando? Estamos usando solr
com lily
e hbase
.
Como posso excluir dados de hbase e solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Respostas:
Se você deseja limpar o índice Solr -
você pode disparar url http -
http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true
(substitua [core name]
pelo nome do núcleo do qual deseja excluir). Ou use se estiver postando dados xml:
<delete><query>*:*</query></delete>
Certifique-se de usar commit=true
para confirmar as mudanças
Não tenho muita ideia de como limpar os dados do hbase.
&commit=true
à consulta para que fique http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Sem ele, eu queria saber por que todos os documentos não foram removidos.
Você pode usar os seguintes comandos para excluir. Use a consulta "corresponder a todos os documentos" em um comando excluir por consulta:
'<delete><query>*:*</query></delete>
Você também deve confirmar após executar a exclusão, portanto, para esvaziar o índice, execute os dois comandos a seguir:
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'
Outra estratégia seria adicionar dois favoritos em seu navegador:
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>
Documentos fonte de SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F
Se você quiser excluir todos os dados no Solr via SolrJ, faça algo assim.
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 você deseja excluir todos os dados do HBase, faça algo assim.
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);
}
}
Use a consulta "corresponder a todos os documentos" em um comando excluir por consulta ::
Você também deve confirmar após executar a exclusão, portanto, para esvaziar o índice, execute os dois comandos a seguir:
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>
definido na url. Eu editei a resposta.
Na linha de comando, use:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
Eu vim aqui procurando excluir todos os documentos da instância do solr através do framework .Net usando SolrNet. Aqui está como eu fui capaz de fazer isso:
Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();
Isso limpou todos os documentos. (Não tenho certeza se isso poderia ser recuperado, estou em fase de aprendizagem e teste do Solr, portanto, considere fazer um backup antes de usar este código)
dispare isso no navegador
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true
este comando irá deletar todos os documentos no índice no solr
Tentei os passos abaixo. Isso funciona bem.
Basta clicar no link Excluir todos os dados SOLR que acertarão e excluir todos os seus dados indexados SOLR, então você obterá os seguintes detalhes na tela como saída.
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">494</int>
</lst>
</response>
se você não estiver obtendo a saída acima, certifique-se do seguinte.
host
(localhost) e port
(8080) no link acima. altere o host e a porta se forem diferentes em sua extremidade.collection
/ collection1
. Eu usei collection1
no link acima. altere-o também se o seu nome principal for diferente.Os exemplos de curl acima de todos falharam para mim quando os executei de um terminal cygwin. Houve erros como esse quando executei o exemplo de 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>
Eu precisava usar o delete em um loop em nomes de núcleo para eliminá-los todos em um projeto.
Esta consulta abaixo funcionou para mim no script do terminal 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>
Essa linha fez com que os dados fossem embora e a mudança persistisse.
Ao limpar um índice Solr, você também deve fazer um commit e otimizar depois de executar a consulta delete-all. Etapas completas necessárias (curl é tudo que você precisa): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
Fiz um marcador de JavaScript que adiciona o link de exclusão na IU do Solr Admin
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 você estiver usando o Cloudera 5.x, aqui nesta documentação é mencionado que Lily também mantém as atualizações e exclusões em tempo real.
Configurando o serviço de indexação Lily HBase NRT para uso com o Cloudera Search
À medida que o HBase aplica inserções, atualizações e exclusões às células da tabela HBase, o indexador mantém o Solr consistente com o conteúdo da tabela HBase, usando a replicação HBase padrão.
Não tenho certeza se truncate 'hTable'
também é compatível com o mesmo.
Caso contrário, você cria um acionador ou serviço para limpar seus dados do Solr e do HBase em um evento específico ou qualquer coisa.
Para excluir todos os documentos de uma coleção Solr, você pode usar esta solicitação:
curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update
Ele usa o corpo JSON.
/update?commit=true
. O corpo da solicitação JSON em si funciona muito bem :)