Como deletar todos os dados de solr e hbase

Respostas:

190

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=truepara confirmar as mudanças

Não tenho muita ideia de como limpar os dados do hbase.

Jayendra
fonte
7
core é necessário se você estiver usando uma configuração multicore.
Jayendra
1
Esta resposta discute como excluir todas as tabelas em hbase: stackoverflow.com/questions/3990952/… . Se você deseja apenas excluir os dados da tabela, pode truncá-los em vez de descartá-los.
codingFoo
ele apaga apenas o índice? ou excluirá também os dados reais?
vishnu viswanath
6
Você pode querer adicionar &commit=trueà consulta para que fique http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueSem ele, eu queria saber por que todos os documentos não foram removidos.
chris544
2
Não funciona. Eu recebo: HTTP ERROR 404 Problema ao acessar / solr / update. Motivo: Não encontrado do solr ...
Stepan Yakovenko
91

Eu usei esta solicitação para excluir todos os meus registros, mas às vezes é necessário confirmar isso.

Para isso, acrescente &commit=trueà sua solicitação:

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

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

Navjot Bhardwaj
fonte
10

Dados Post json (por exemplo, com curl)

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

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);
    }
 }
RATabora
fonte
4

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'
Nanhe Kumar
fonte
Funcionou bem com <core>definido na url. Eu editei a resposta.
Achala Dissanayake
4

Na linha de comando, use:

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

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)

Habib
fonte
Isso é muito útil. Obrigado !
Karan
3

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

bittu
fonte
Se você pudesse editar sua resposta e explicar o que o código que está mostrando faz e por que / como esse código responde à pergunta, isso poderia realmente ajudar.
Lea Cohen de
a resposta acima está ok agora?
bittu
Certamente é mais compreendido :).
Lea Cohen
2

Usei essa consulta para excluir todos os meus registros.

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

Tentei os passos abaixo. Isso funciona bem.

  • Verifique se o servidor SOLR está em execução
  • 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.

    • Usei o padrão host(localhost) e port(8080) no link acima. altere o host e a porta se forem diferentes em sua extremidade.
    • O nome do núcleo padrão deve ser collection/ collection1. Eu usei collection1no link acima. altere-o também se o seu nome principal for diferente.
Ganesa Vijayakumar
fonte
1

Se você precisar limpar todos os dados, pode ser mais rápido recriar a coleção, por exemplo

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

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.

ndasusers
fonte
1

Solr, não tenho certeza, mas você pode excluir todos os dados do hbase usando o comando truncate como abaixo:

truncate 'table_name'

Ele excluirá todas as chaves de linha da tabela hbase.

Kapil
fonte
0

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

insira a descrição da imagem aqui

MyroslavN
fonte
0

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.

Murtaza Kanchwala
fonte
0

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.

youhans
fonte
Como apontado por outros, é provavelmente melhor usar /update?commit=true. O corpo da solicitação JSON em si funciona muito bem :)
Frederick Zhang