List of usage examples for org.apache.lucene.index IndexWriter numDeletedDocs
@Override public int numDeletedDocs(SegmentCommitInfo info)
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(); } }