Question

I am using solrj as client for indexing documents on the solr server.

I am having problem while deleting the indexes by 'id' from the solr server. I am using following code to delete the indexes:

server.deleteById("id:20");
server.commit(true,true);

After this when i again search for the documents, the search result contains the above document also. Dont know what is going wrong with this code. Please help me out with issue.

Thanks!

Was it helpful?

Solution

When you call deleteById, just use the id, without query syntax:

server.deleteById("20");
server.commit();

OTHER TIPS

After you delete the document, commit the server and add the following lines. After the server commit line.

  UpdateRequest req = new UpdateRequest();
  req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
  req.add( docs );
  UpdateResponse rsp = req.process( server );

Use the method deleteByQuery() to delete the documents matching the query:

server.deleteByQuery("id:20");
server.commit();

So the deleteById will work only if you are forming your key using only one attribute. So, I had case where the id was a combination of multiple attributes like employeeId+deptId. But, my table had employeeId & deptId as separate columns as well with indexes created on it. So when I wanted to delete a record I had only the employeeId and not deptId. I used the curl command to delete where you can specify the column and its value and it will delete the entire record.

E.g. curl http://localhost:8983/solr/update --data ':' -H 'Content-type:text/xml; charset=utf-8'

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top