The following code does not delete the document by term as expected:
RAMDirectory idx = new RAMDirectory(); IndexWriter writer = new IndexWriter(idx, new SnowballAnalyzer(Version.LUCENE_30, "English"), IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); doc.add(new Field("title", "mydoc", Field.Store.YES, Field.Index.NO)); doc.add(new Field("content", "some content, deleteme", Field.Store.YES, Field.Inde x.ANALYZED)); writer.addDocument(doc); Document doc2 = new Document(); doc2.add(new Field("title", "mydoc2", Field.Store.YES, Field.Index.NO)); doc2.add(new Field("content", "other content, don't deleteme", Field.Store.YES, Field.I ndex.ANALYZED)); writer.addDocument(doc2); writer.optimize(); writer.close(); IndexWriter writer2 = new IndexWriter(idx, new SnowballAnalyzer(Version.LUCENE_30, "English"), IndexWriter.MaxFieldLength.LIMITED); int before = writer2.numDocs(); writer2.deleteDocuments(new Term("title", "mydoc")); writer2.commit(); writer2.optimize(); int after = writer2.numDocs(); writer2.close(); int docs_deleted = before - after;
I tried uninstalling with IndexReader and IndexWriter and not working.
I also tried adding another IndexReader search after the above code in case the number will only be updated after writer2 is closed (mentioned in this FAQ ), but that doesn't help. The execution of the writer.deleteAll () function works, it is simply not deleted by the term.
I found an old link that only fields of type Field.Keyword can be deleted, but this is no longer a valid field type in Lucene 3.x
Stevep
source share