web-dev-qa-db-fra.com

Suppression de documents Solr dans Solr Admin

Comment supprimer tous les documents de mon index SOLR à l'aide de l'administrateur SOLR.

J'ai essayé d'utiliser l'URL et cela fonctionne mais je veux savoir si la même chose peut être faite en utilisant l'administrateur ..

34
user1050619

Mise à jour: les nouvelles versions de Solr peuvent mieux fonctionner avec cette réponse: https://stackoverflow.com/a/48007194/3692256

Ma réponse originale est ci-dessous:


Je triche un peu, mais pas autant que d'écrire la requête à la main.

Depuis que j'ai déjà ressenti la douleur de suppressions accidentelles, j'essaye de tromper mes suppressions autant que possible (dans tout type de magasin de données).

1) Exécutez une requête dans l'écran Solr Admin Query, en utilisant uniquement le paramètre "q" en haut à gauche. Limitez-le aux éléments que vous souhaitez réellement supprimer. Pour cet exemple, j'utilise *:*, mais vous pouvez utiliser des choses comme id:abcdef ou une plage ou autre. Si vous avez une requête complexe et folle, il peut être plus facile de le faire plusieurs fois, une fois pour chaque partie des données que vous souhaitez supprimer.

2) En plus des résultats, il y a une URL grisée. Si vous passez la souris dessus, elle devient noire. Il s'agit de l'URL qui a été utilisée pour obtenir les résultats. Faites un clic droit (contexte) dessus et ouvrez-le dans un nouvel onglet/fenêtre. Vous devriez obtenir quelque chose comme:

http://localhost:8983/solr/my_core_name/select?q=*%3A*&wt=json&indent=true

Maintenant, je veux le mettre dans un format de suppression. Je remplace le select?q= avec update?commit=true&stream.body=<delete><query> et, à la fin, le &wt=json&indent=true avec </query></delete>.

Je me retrouve donc avec:

http://localhost:8983/solr/my_core_name/update?commit=true&stream.body=<delete><query>*%3A*</query></delete>

Respirez profondément, faites tout ce que vous faites pour avoir de la chance et soumettez l'URL (entrez les œuvres clés).

Maintenant, vous devriez pouvoir revenir à la page d'administration de Solr et exécuter la requête d'origine et obtenir zéro résultat.

53
Guy Schalnat

Utilisez l'une des requêtes ci-dessous dans l'onglet Document de l'interface utilisateur Solr Admin:

XML:

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

JSON:

{'delete': {'query': '*:*'}}

Assurez-vous de sélectionner la liste déroulante Document Type Jusqu'à Solr Command (raw XML or JSON).

53
Nanda Kumar
curl http://localhost:8080/solr/update -H "Content-type: text/xml" --data-binary '<delete><query>*:*</query></delete>'
curl http://localhost:8080/solr/update -H "Content-type: text/xml" --data-binary '<commit />'
8
user3754136

Cette solution n'est applicable que si vous supprimez tous les documents dans plusieurs collections et non pour une suppression sélective:


J'ai eu le même scénario, où je devais supprimer tous les documents dans plusieurs collections. Il y avait près de 500 000 documents dans chaque fragment et il y avait plusieurs fragments de chaque collection. La mise à jour et la suppression des documents à l'aide de la requête était une tâche importante et a donc suivi le processus ci-dessous:

  1. A utilisé l'API Solr pour obtenir les détails de toutes les collections -
    http://<solrIP>:<port>/solr/admin/collections?action=clusterstatus&wt=json
    
    Cela donne les détails comme le nom de la collection, numShards, configname, router.field, maxShards, replicationFactor, etc.
  2. J'ai enregistré la sortie json avec les détails ci-dessus dans un fichier pour référence future et pris les sauvegardes de toutes les collections dont j'avais besoin pour supprimer les documents, en utilisant l'API suivante:
    http://<solr-ip>:<port>/solr/admin/collections?action=BACKUP&name=myBackupName&collection=myCollectionName&location=/path/to/my/shared/drive
    
  3. De plus, j'ai supprimé toutes les collections dont j'ai besoin pour supprimer tous les documents pour utiliser les éléments suivants:
    http://<solr-ip>:<port>/solr/admin/collections?action=DELETEALIAS&name=collectionname
    
  4. Recréé toutes les collections en utilisant les détails de l'étape 1 et l'API suivante:
    http://<solr-ip>:<port>/solr/admin/collections?action=CREATE&name=collectionname&numShards=number&replicationFactor=number&maxShardsPerNode=number&collection.configName=configname&router.field=routerfield
    

J'ai exécuté les étapes ci-dessus en boucle pour toutes les collections et cela a été fait en quelques secondes pour environ 100 collections avec d'énormes données. De plus, j'avais aussi les sauvegardes pour toutes les collections.

Reportez-vous à cela pour les autres API Solr: DELETEALIAS: Supprimer un alias de collection, Entrée

1
Pranav Advani