Example usage for org.apache.lucene.index IndexWriter numDeletedDocs

List of usage examples for org.apache.lucene.index IndexWriter numDeletedDocs

Introduction

In this page you can find the example usage for org.apache.lucene.index IndexWriter numDeletedDocs.

Prototype

@Override
public int numDeletedDocs(SegmentCommitInfo info) 

Source Link

Document

Obtain the number of deleted docs for a pooled reader.

Usage

From source file:org.elasticsearch.index.engine.robin.RobinEngine.java

License:Apache License

@Override
public List<Segment> segments() {
    rwl.readLock().lock();/*from  w w w .j  a v a  2  s . c om*/
    try {
        IndexWriter indexWriter = this.indexWriter;
        if (indexWriter == null) {
            throw new EngineClosedException(shardId, failedEngine);
        }
        Map<String, Segment> segments = new HashMap<String, Segment>();

        // first, go over and compute the search ones...
        Searcher searcher = searcher();
        try {
            IndexReader[] readers = searcher.reader().getSequentialSubReaders();
            for (IndexReader reader : readers) {
                assert reader instanceof SegmentReader;
                SegmentInfo info = Lucene.getSegmentInfo((SegmentReader) reader);
                assert !segments.containsKey(info.name);
                Segment segment = new Segment(info.name);
                segment.search = true;
                segment.docCount = reader.numDocs();
                segment.delDocCount = reader.numDeletedDocs();
                try {
                    segment.sizeInBytes = info.sizeInBytes(true);
                } catch (IOException e) {
                    logger.trace("failed to get size for [{}]", e, info.name);
                }
                segments.put(info.name, segment);
            }
        } finally {
            searcher.release();
        }

        // now, correlate or add the committed ones...
        if (lastCommittedSegmentInfos != null) {
            SegmentInfos infos = lastCommittedSegmentInfos;
            for (SegmentInfo info : infos) {
                Segment segment = segments.get(info.name);
                if (segment == null) {
                    segment = new Segment(info.name);
                    segment.search = false;
                    segment.committed = true;
                    segment.docCount = info.docCount;
                    try {
                        segment.delDocCount = indexWriter.numDeletedDocs(info);
                    } catch (IOException e) {
                        logger.trace("failed to get deleted docs for committed segment", e);
                    }
                    try {
                        segment.sizeInBytes = info.sizeInBytes(true);
                    } catch (IOException e) {
                        logger.trace("failed to get size for [{}]", e, info.name);
                    }
                    segments.put(info.name, segment);
                } else {
                    segment.committed = true;
                }
            }
        }

        Segment[] segmentsArr = segments.values().toArray(new Segment[segments.values().size()]);
        Arrays.sort(segmentsArr, new Comparator<Segment>() {
            @Override
            public int compare(Segment o1, Segment o2) {
                return (int) (o1.generation() - o2.generation());
            }
        });

        return Arrays.asList(segmentsArr);
    } finally {
        rwl.readLock().unlock();
    }
}