My code at the moment is as follows:
Directory dir = FSDirectory.open(Paths.get(vectorIndexPath));
IndexReader reader =
DirectoryReader.open(FSDirectory.open(Paths.get(vectorIndexPath)));
int numberOfDocsBeforeDeleting = reader.numDocs();
log.info("Number of documents: " + numberOfDocsBeforeDeleting);
log.info("Number of deleted documents: " + reader.numDeletedDocs());
reader.close();
log.info("Delete document with path '" + uuid +"' from index '" + vectorIndexPath
+"' ...");
IndexWriterConfig iwc =new IndexWriterConfig();IndexWriter writer =new
IndexWriter(dir, iwc);
Term term =new Term(PATH_FIELD, uuid);
writer.deleteDocuments(term);writer.close();
reader = DirectoryReader.open(FSDirectory.open(Paths.get(vectorIndexPath)));
int numberOfDocsAfterDeleting = reader.numDocs();
log.info("Number of documents: " + numberOfDocsAfterDeleting);
log.info("Number of deleted documents: " + (numberOfDocsBeforeDeleting -
numberOfDocsAfterDeleting));
// TODO: Not sure whether the method numDeletedDocs() makes sense here
log.info("Number of deleted documents: " + reader.numDeletedDocs()); reader.close();
whereas this code always returns 0, whereas
numberOfDocsBeforeDeleting - numberOfDocsAfterDeleting
produces the correct result.
Should I open the reader before closing the writer?
Thanks
Michael
Am 08.12.22 um 11:36 schrieb Uwe Schindler:
You have to reopen the index reader to see deletes from the indexwriter.
Am 08.12.2022 um 10:32 schrieb Hrvoje Lončar:
Did you call this method before or after commit method?
My wild guess would be that you can count deleted documents inside
transaction only.
On Thu, Dec 8, 2022 at 12:10 AM Michael Wechner
<michael.wech...@wyona.com>
wrote:
Hi
I am using Lucen 9.4.2 vector search and everything seems to work fine,
except that when I delete some documents from the index, then the
method
https://lucene.apache.org/core/9_0_0/core/org/apache/lucene/index/IndexReader.html#numDeletedDocs()
always returns 0, whereas I would have expected that it would return
the
number of documents which I deleted from the index.
IndexReader.numDocs() returns the correct number though.
I guess I misunderstand the javadoc and in particular the note "*NOTE*:
This operation may run in O(maxDoc)."
Does somebody explain in more detail what this method is doing?
Thanks
Michael