Comment supprimer toutes les données de solr et hbase

Réponses:

190

Si vous souhaitez nettoyer l'index Solr -

vous pouvez lancer une URL http -

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

(à remplacer [core name]par le nom du noyau dont vous souhaitez supprimer). Ou utilisez ceci si vous publiez des données XML:

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

Assurez-vous que vous utilisez commit=truepour valider les modifications

Cependant, je n'ai pas beaucoup d'idée sur la suppression des données hbase.

Jayendra
la source
7
core est nécessaire si vous utilisez une configuration multicœur.
Jayendra
1
Cette réponse explique comment supprimer toutes les tables dans hbase: stackoverflow.com/questions/3990952/… . Si vous souhaitez simplement supprimer les données du tableau, vous pouvez les tronquer au lieu de les supprimer.
codingFoo
supprime-t-il uniquement l'index? ou supprimera-t-il également les données réelles?
vishnu viswanath
6
Vous voudrez peut-être ajouter &commit=trueà la requête pour qu'elle devienne http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueSans elle, je me demandais pourquoi tous les documents n'ont pas été supprimés.
chris544
2
Ça ne marche pas. J'obtiens: HTTP ERROR 404 Problème d'accès à / solr / update. Raison: introuvable de solr ...
Stepan Yakovenko
91

J'ai utilisé cette demande pour supprimer tous mes enregistrements, mais il est parfois nécessaire de le valider.

Pour cela, ajoutez &commit=trueà votre demande:

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

Vous pouvez utiliser les commandes suivantes pour supprimer. Utilisez la requête "match all docs" dans une commande de suppression par requête:

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

Vous devez également valider après avoir exécuté la suppression afin que, pour vider l'index, exécutez les deux commandes suivantes:

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'

Une autre stratégie serait d'ajouter deux signets dans votre navigateur:

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


Documents sources de SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F

Navjot Bhardwaj
la source
10

Publier des données json (par exemple avec curl)

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

Si vous souhaitez supprimer toutes les données de Solr via SolrJ, faites quelque chose comme ça.

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 vous souhaitez supprimer toutes les données dans HBase, procédez comme suit.

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
la source
4

Utilisez la requête "match all docs" dans une commande de suppression par requête ::

Vous devez également valider après avoir exécuté la suppression afin que, pour vider l'index, exécutez les deux commandes suivantes:

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
la source
Fonctionne bien avec <core>défini dans l'url. J'ai édité la réponse.
Achala Dissanayake
4

Depuis la ligne de commande, utilisez:

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

Je suis venu ici pour supprimer tous les documents de l'instance solr via le framework .Net en utilisant SolrNet. Voici comment j'ai pu le faire:

Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
    ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();

Cela a effacé tous les documents. (Je ne suis pas sûr que cela puisse être récupéré, je suis en phase d'apprentissage et de test de Solr, veuillez donc envisager une sauvegarde avant d'utiliser ce code)

Habib
la source
Ceci est très utile. Je vous remercie !
Karan
3

lancez ceci dans le navigateur

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true cette commande supprimera tous les documents de l'index dans solr

bittu
la source
Si vous pouviez modifier votre réponse et expliquer ce que fait le code que vous montrez, et pourquoi / comment ce code répond à la question, cela pourrait vraiment aider.
Lea Cohen
est la réponse ci-dessus ok maintenant ..?
bittu
C'est certainement plus compris :).
Lea Cohen
2

J'ai utilisé cette requête pour supprimer tous mes enregistrements.

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

J'ai essayé les étapes ci-dessous. Ça marche bien.

  • Veuillez vous assurer que le serveur SOLR fonctionne
  • Cliquez simplement sur le lien Supprimer toutes les données SOLR qui frapperont et supprimera toutes vos données indexées SOLR, puis vous obtiendrez les détails suivants à l'écran en sortie.

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
    
  • si vous n'obtenez pas la sortie ci-dessus, veuillez vous assurer de ce qui suit.

    • J'ai utilisé les hostparamètres par défaut (localhost) et port(8080) sur le lien ci-dessus. veuillez modifier l'hôte et le port s'ils sont différents de votre côté.
    • Le nom de base par défaut doit être collection/ collection1. J'ai utilisé collection1dans le lien ci-dessus. veuillez le changer aussi si votre nom principal est différent.
Ganesa Vijayakumar
la source
1

Si vous devez nettoyer toutes les données, il peut être plus rapide de recréer la collection, par exemple

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

Les exemples curl ont surtout échoué pour moi lorsque je les ai exécutés à partir d'un terminal cygwin. Il y a eu des erreurs comme celle-ci lorsque j'ai exécuté l'exemple 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>

J'avais besoin d'utiliser la suppression dans une boucle sur les noms de base pour les effacer tous dans un projet.

Cette requête ci-dessous a fonctionné pour moi dans le script du 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>

Cette seule ligne a fait disparaître les données et le changement a persisté.

ndasusers
la source
1

Solr Je ne suis pas sûr mais vous pouvez supprimer toutes les données de hbase en utilisant la commande truncate comme ci-dessous:

truncate 'table_name'

Il supprimera toutes les clés de ligne de la table hbase.

Kapil
la source
0

J'ai créé un signet JavaScript qui ajoute le lien de suppression dans l'interface utilisateur de 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>');
})();

entrez la description de l'image ici

MyroslavN
la source
0

Si vous utilisez Cloudera 5.x, il est mentionné ici dans cette documentation que Lily gère également les mises à jour et les suppressions en temps réel.

Configuration du service d'indexation Lily HBase NRT pour une utilisation avec Cloudera Search

Comme HBase applique des insertions, des mises à jour et des suppressions aux cellules de table HBase, l'indexeur maintient Solr cohérent avec le contenu de table HBase, en utilisant la réplication HBase standard.

Je ne sais pas si truncate 'hTable'est également pris en charge dans le même.

Sinon, vous créez un déclencheur ou un service pour effacer vos données de Solr et de HBase sur un événement particulier ou quoi que ce soit.

Murtaza Kanchwala
la source
0

Pour supprimer tous les documents d'une collection Solr, vous pouvez utiliser cette demande:

curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update

Il utilise le corps JSON.

youhans
la source
Comme d'autres l'ont souligné, il est probablement préférable d'utiliser /update?commit=true. Le corps de requête JSON lui-même fonctionne très bien :)
Frederick Zhang