Comment supprimer toutes les données solr
par commande? Nous utilisons solr
avec lily
et hbase
.
Comment puis-je supprimer des données à la fois de hbase et de solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Comment supprimer toutes les données solr
par commande? Nous utilisons solr
avec lily
et hbase
.
Comment puis-je supprimer des données à la fois de hbase et de solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Réponses:
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=true
pour valider les modifications
Cependant, je n'ai pas beaucoup d'idée sur la suppression des données hbase.
&commit=true
à la requête pour qu'elle devienne http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Sans elle, je me demandais pourquoi tous les documents n'ont pas été supprimés.
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
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);
}
}
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'
<core>
défini dans l'url. J'ai édité la réponse.
Depuis la ligne de commande, utilisez:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
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)
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
J'ai essayé les étapes ci-dessous. Ça marche bien.
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.
host
paramè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é.collection
/ collection1
. J'ai utilisé collection1
dans le lien ci-dessus. veuillez le changer aussi si votre nom principal est différent.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é.
Lors de la suppression d'un index Solr, vous devez également effectuer une validation et une optimisation après avoir exécuté la requête de suppression de tout. Étapes complètes requises (curl est tout ce dont vous avez besoin): 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é 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.
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.
/update?commit=true
. Le corps de requête JSON lui-même fonctionne très bien :)