Comment puis-je supprimer toutes les données de solr
par commande? Nous utilisons solr
avec lily
et hbase
.
Comment puis-je supprimer des données de hbase et de solr?
http://lucene.Apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Si vous voulez nettoyer l’index Solr -
vous pouvez renvoyer http url -
http://Host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true
(remplacez [core name]
par le nom du noyau que vous souhaitez supprimer). Ou utilisez ceci si vous publiez des données XML:
<delete><query>*:*</query></delete>
Assurez-vous d'utiliser commit=true
pour valider les modifications.
Cependant, vous ne savez pas trop comment effacer les données hbase.
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
Vous pouvez utiliser les commandes suivantes pour supprimer la propriété . 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 l'exécution de la suppression. 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 consiste à 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
Données post-json (par exemple avec curl)
curl -X POST -H 'Content-Type: application/json' \
'http://<Host>:<port>/solr/<core>/update?commit=true' \
-d '{ "delete": {"query":"*:*"} }'
Si vous souhaitez supprimer toutes les données de Solr via SolrJ, procédez comme suit.
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 de 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);
}
}
Utilisez la requête "match all docs" dans une commande de suppression par requête::
Vous devez également valider après l'exécution de la suppression. 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'
Je suis venu ici pour supprimer tous les documents de l'instance solr via le framework .Net à l'aide de 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)
déclenche 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
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
Si vous devez nettoyer toutes les données, il peut être plus rapide de recréer une collection, par exemple.
solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1
Depuis la ligne de commande, utilisez:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
Les exemples de curl ont surtout échoué pour moi lorsque je les ai exécutés à partir d’un terminal cygwin. Il y avait 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 principaux pour les effacer tous dans un projet.
Cette requête ci-dessous a fonctionné pour moi dans le script de 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 ligne a fait disparaître les données et le changement a persisté.
Solr je ne suis pas sûr mais vous pouvez supprimer toutes les données de hbase en utilisant la commande troncature comme ci-dessous
truncate 'table_name'
Il supprimera toutes les lignes de la table hbase.
Lorsque vous effacez un index Solr, vous devez également effectuer une validation et une optimisation après avoir exécuté la requête delete-all. Toutes les étapes sont requises (tout ce dont vous avez besoin, c'est le curl): http://www.alphadevx.com/a/365- Clearing-a-Solr-search-index
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>');
})();
Si vous utilisez Cloudera 5.x, il est mentionné 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
Lorsque HBase applique des insertions, des mises à jour et des suppressions aux cellules du tableau HBase, l'indexeur maintient Solr en cohérence avec le contenu de la table HBase, en utilisant réplication HBase standard.
Pas sûr que sitruncate 'hTable'
soit également supporté de la même manière.
Sinon, vous créez un déclencheur ou un service pour effacer vos données de Solr et HBase sur un événement particulier ou quoi que ce soit.