How do I delete all the documents in my SOLR index using the SOLR Admin.
I tried using the url and it works but want to know if the same can be done using the Admin..
How do I delete all the documents in my SOLR index using the SOLR Admin.
I tried using the url and it works but want to know if the same can be done using the Admin..
Use one of the queries below in the Document tab of Solr Admin UI:
XML:
<delete><query>*:*</query></delete>
JSON:
{'delete': {'query': '*:*'}}
Make sure to select the Document Type
drop down to Solr Command (raw XML or JSON)
.
<delete><query>*:*</query></delete>
Also, don't forget to write /update as the request handler. –
Wicker commit
. –
Antiscorbutic Update: newer versions of Solr may work better with this answer: https://mcmap.net/q/234984/-deleting-solr-documents-from-solr-admin
My original answer is below:
I'm cheating a little, but not as much as writing the query by hand.
Since I've experienced the pain of accidental deletions before, I try to foolproof my deletions as much as possible (in any kind of data store).
1) Run a query in the Solr Admin Query screen, by only using the "q" parameter at the top left. Narrow it to the items you actually want to delete. For this example, I'm using *:*
, but you can use things like id:abcdef
or a range or whatever. If you have a crazy complex query, you may find it easier to do this multiple times, once for each part of the data you wish to delete.
2) On top of the results, there is a grayed out URL. If you hover the mouse over it, it turns black. This is the URL that was used to get the results. Right (context) click on it and open it in a new tab/window. You should get something like:
http://localhost:8983/solr/my_core_name/select?q=*%3A*&wt=json&indent=true
Now, I want to get it into a delete format. I replace the select?q=
with update?commit=true&stream.body=<delete><query>
and, at the end, the &wt=json&indent=true
with </query></delete>
.
So I end up with:
http://localhost:8983/solr/my_core_name/update?commit=true&stream.body=<delete><query>*%3A*</query></delete>
Take a deep breath, do whatever you do for good luck, and submit the url (enter key works).
Now, you should be able to go back to the Solr admin page and run the original query and get zero results.
delete -c core_name
–
Graham <delete><query>*:*</query></delete>
–
Ebracteate 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 />'
http://localhost:8080/solr/my_core_name_here/update...
–
Coonan select XML on collection Document tab and update below parameter.
<delete><query>*:*</query></delete>
Under the Documents tab, select "raw XML or JSON" under Document Type and just add the query you need using the unique identifiers for each document.
{'delete': {'query': 'filter(product_id:(25634 25635 25636))'}}
This solution is only applicable if you are deleting all the documents in multiple collections and not for selective deletion:
I had the same scenario, where I needed to delete all the documents in multiple collections. There were close to 500k documents in each shard and there were multiple shards of each collection. Updating and deleting the documents using the query was a big task and thus followed the below process:
http://<solrIP>:<port>/solr/admin/collections?action=clusterstatus&wt=json
This gives the details like name of collection, numShards, configname, router.field, maxShards, replicationFactor, etc.http://<solr-ip>:<port>/solr/admin/collections?action=BACKUP&name=myBackupName&collection=myCollectionName&location=/path/to/my/shared/drive
http://<solr-ip>:<port>/solr/admin/collections?action=DELETEALIAS&name=collectionname
http://<solr-ip>:<port>/solr/admin/collections?action=CREATE&name=collectionname&numShards=number&replicationFactor=number&maxShardsPerNode=number&collection.configName=configname&router.field=routerfield
I executed the above steps in loop for all the collections and was done in seconds for around 100 collections with huge data. Plus, I had the backups as well for all the collections.
Refer to this for other Solr APIs: DELETEALIAS: Delete a Collection Alias, Input
If you want delete some documents by ID you can use the Solr POST tool.
./post -c $core_name ./delete.xml
Where the delete.xml
file contains documents ids:
<delete>
<id>a3f04b50-5eea-4e26-a6ac-205397df7957</id>
</delete>
For those who want to automate this sort of request, note first that the stream.body
URL-based approach offered by Guy doesn't work (we get "Stream Body is disabled" in reply on recent Solr versions). And as a variant to user3754136's curl, I offer here a different one that worked for me.
I show either using xml or json for the payload, to suit your preference (though of course you should change your port and collectionname per your solr setup). First as XML:
curl -XPOST http://localhost:8995/solr/yourcollection/update?commit=true -d "<delete><query>*:*</query></delete>"
or as json:
curl -XPOST http://localhost:8995/solr/yourcollection/update?commit=true -d "{'delete': {'query': 'filter(*:*)'}}"
And of course either would work as well with some criteria you might offer in the filter
, instead of *:*
, which is offered here because the original question here asked how to delete ALL documents.
Finally, instead of using curl you could implement this as code in whatever language you want, if you prefer. See especially https://curlconverter.com/ for many available variants, like python, javascript, node.js, go, php, etc.
© 2022 - 2024 — McMap. All rights reserved.
stream.body
has been disabled (which seems to be the case with recent versions of Solr). This answer is also more straightforward. – Freehanded