Deleting index from Solr using solrj as a client

2019-04-06 05:47发布

问题:

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!

回答1:

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

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


回答2:

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


回答3:

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

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


回答4:

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'