82

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..

user1050619
  • 19,822
  • 85
  • 237
  • 413

8 Answers8

190

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).

Nicholas DiPiazza
  • 10,029
  • 11
  • 83
  • 152
Nanda Kumar
  • 2,016
  • 1
  • 9
  • 12
61

Update: newer versions of Solr may work better with this answer: https://stackoverflow.com/a/48007194/3692256

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.

Guy Schalnat
  • 1,697
  • 15
  • 26
45

For everyone who doesn't like a lot of words :-)

Solr Admin: remove data from Core

Hermann Schwarz
  • 1,495
  • 1
  • 15
  • 30
15

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 />'
user3754136
  • 509
  • 11
  • 25
  • I was getting a 404 until I put the core name in the URL, e.g. `http://localhost:8080/solr/my_core_name_here/update...` – Tyler Collier May 02 '22 at 19:08
9

select XML on collection Document tab and update below parameter.

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

Rohit
  • 171
  • 1
  • 5
2

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))'}}

enter image description here

mikoop
  • 1,981
  • 1
  • 18
  • 18
1

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:

  1. Used the Solr API for getting the details for all the collections -
    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.
  2. Saved the output json with the above details in a file for future reference and took the backups of all the collections I needed to delete the documents in, using the following API:
    http://<solr-ip>:<port>/solr/admin/collections?action=BACKUP&name=myBackupName&collection=myCollectionName&location=/path/to/my/shared/drive
    
  3. Further I deleted all the collections which I need to remove all the documents for using the following:
    http://<solr-ip>:<port>/solr/admin/collections?action=DELETEALIAS&name=collectionname
    
  4. Re-created all the collections using the details in the Step 1 and the following API:
    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

ejderuby
  • 710
  • 5
  • 21
0

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>
Sergey Nemchinov
  • 1,348
  • 15
  • 21