Index: lucene/core/src/java/org/apache/lucene/search/NRTManager.java =================================================================== --- lucene/core/src/java/org/apache/lucene/search/NRTManager.java (revision 1353141) +++ lucene/core/src/java/org/apache/lucene/search/NRTManager.java (working copy) @@ -28,6 +28,7 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.SegmentInfoPerCommit; import org.apache.lucene.index.IndexReader; // javadocs import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexableField; @@ -255,6 +256,14 @@ long getAndIncrementGeneration() { return indexingGen.getAndIncrement(); } + + public long tryDeleteDocument(SegmentInfoPerCommit info, int docID) throws IOException { + if (writer.tryDeleteDocument(info, docID)) { + return indexingGen.get(); + } else { + return -1; + } + } } /** Index: lucene/core/src/java/org/apache/lucene/index/SegmentReader.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (revision 1353141) +++ lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (working copy) @@ -194,7 +194,8 @@ /** * Return the SegmentInfoPerCommit of the segment this reader is reading. */ - SegmentInfoPerCommit getSegmentInfo() { + // nocmmit public + public SegmentInfoPerCommit getSegmentInfo() { return si; } Index: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (revision 1353141) +++ lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -1216,6 +1216,26 @@ } } + public synchronized boolean tryDeleteDocument(SegmentInfoPerCommit info, int docID) throws IOException { + if (segmentInfos.indexOf(info) != -1) { + ReadersAndLiveDocs rld = readerPool.get(info, false); + if (rld != null) { + synchronized(bufferedDeletesStream) { + rld.initWritableLiveDocs(); + rld.delete(docID); + // nocommit droip 100% deleted seg? + //System.out.println(" yes " + info.info.name + " " + docID); + return true; + } + } else { + //System.out.println(" no rld " + info.info.name + " " + docID); + } + } else { + //System.out.println(" no seg " + info.info.name + " " + docID); + } + return false; + } + /** * Deletes the document(s) containing any of the * terms. All given deletes are applied and flushed atomically