Removing a term document from lucene

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(); /* IndexReader reader = IndexReader.open(idx, false); int docs_up_for_deletion = reader.docFreq(new Term("title")); int before = reader.numDocs(); int docs_deleted = reader.deleteDocuments(new Term("title", "mydoc")); reader.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

+1
source share
1 answer

Your title field is not indexed. Change

 new Field("title", "mydoc", Field.Store.YES, Field.Index.NO) 

to

 new Field("title", "mydoc", Field.Store.YES, Field.Index.ANALYZED) 

or

 new Field("title", "mydoc", Field.Store.YES, Field.Index.NOT_ANALYZED) 

depending on whether you want to analyze your field.

+1
source

All Articles