@Override public DocIDMapper getDocIDMapper(final ZoieMultiReader<?> reader) throws IOException { final ZoieSegmentReader<?>[] zoieSegmentReaders = reader.getSubReaders(); final DocIDMapper[] mappers = new DocIDMapper[zoieSegmentReaders.length]; for (int i = 0; i < zoieSegmentReaders.length; ++i) { // reuse DocIDMapper since ZoieSegmentReader may be reused if (zoieSegmentReaders[i].getDocIDMapper() != null) { mappers[i] = zoieSegmentReaders[i].getDocIDMapper(); } else { mappers[i] = getDocIDMapper(zoieSegmentReaders[i]); zoieSegmentReaders[i].setDocIDMapper(mappers[i]); } } return new DocIDMapper() { @Override public int getDocID(long uid) { int docid; for (int i = mappers.length - 1; i >= 0; --i) { docid = mappers[i].getDocID(uid); if (docid != DocIDMapper.NOT_FOUND) { return docid + reader.getSubReaderBase(i); } } return DocIDMapper.NOT_FOUND; } }; } }
@Override public DocIDMapper getDocIDMapper(final ZoieMultiReader<?> reader) throws IOException { final ZoieSegmentReader<?>[] zoieSegmentReaders = reader.getSubReaders(); final DocIDMapper[] mappers = new DocIDMapper[zoieSegmentReaders.length]; for (int i = 0; i < zoieSegmentReaders.length; ++i) { // reuse DocIDMapper since ZoieSegmentReader may be reused if (zoieSegmentReaders[i].getDocIDMapper() != null) { mappers[i] = zoieSegmentReaders[i].getDocIDMapper(); } else { mappers[i] = getDocIDMapper(zoieSegmentReaders[i]); zoieSegmentReaders[i].setDocIDMapper(mappers[i]); } } return new DocIDMapper() { @Override public int getDocID(long uid) { int docid; for (int i = mappers.length - 1; i >= 0; --i) { docid = mappers[i].getDocID(uid); if (docid != DocIDMapper.NOT_FOUND) { return docid; } } return DocIDMapper.NOT_FOUND; } }; } }
@Override public DocIdSet getDocIdSet(AtomicReaderContext ctx, Bits acceptDocs) throws IOException { SegmentReader reader = (SegmentReader) (ctx.reader()); int idx = -1; for (int i = 0; i < _subZoieReaders.length; ++i) { if (_subZoieReaders[i].getSegmentName().equals(reader.getSegmentName())) { idx = i; break; } } if (idx == -1) { throw new IOException("Can't find sub-reader"); } return new UIDDocIdSet(_filteredIDs, _subZoieReaders[idx].getDocIDMapper()); } }
@Override public IntArray getDocArray(BoboSegmentReader boboIndexReader) { ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (boboIndexReader.getInnerReader()); DocIDMapperImpl docIDMapper = (DocIDMapperImpl) zoieReader.getDocIDMapper(); return new DefaultIntArray(docIDMapper.getDocArray()); }
@Override public DocIdSet getDocIdSet(AtomicReaderContext ctx, Bits acceptDocs) throws IOException { SegmentReader reader = (SegmentReader) (ctx.reader()); int idx = -1; for (int i = 0; i < _subZoieReaders.length; ++i) { if (_subZoieReaders[i].getSegmentName().equals(reader.getSegmentName())) { idx = i; break; } } if (idx == -1) { throw new IOException("Can't find sub-reader"); } return new UIDDocIdSet(_filteredIDs, _subZoieReaders[idx].getDocIDMapper()); } }
@Override public RandomAccessDocIdSet getRandomAccessDocIdSet(BoboSegmentReader reader) throws IOException { ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (reader.getInnerReader()); DocIDMapper docidMapper = zoieReader.getDocIDMapper(); final int docid = docidMapper.getDocID(val); if (docid == DocIDMapper.NOT_FOUND) { return EmptyDocIdSet.getInstance(); } return new SingleDocRandmAccessDocIdSet(docid); } };
DocIDMapper mapper = zoieSegmentReader.getDocIDMapper(); if (mapper == null) return; int docId = mapper.getDocID(uid);
@SuppressWarnings("unchecked") @Override public void finalizeSegment(BoboSegmentReader reader, FacetCountCollector[] facetCountCollectors) { if (docIdIndex > 0) { ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (reader.getInnerReader()); DocIDMapperImpl docIDMapper = (DocIDMapperImpl) zoieReader.getDocIDMapper(); Serializable mapResult = mapReduceStrategy.map(new DefaultIntArray(partialDocIds), docIdIndex, zoieReader.getUIDArray(), fieldAccessorFactory.getAccessor(facetInfos, reader, docIDMapper), new FacetCountAccessor(facetCountCollectors)); if (mapResult != null) { result.getMapResults().add(mapResult); } } docIdIndex = 0; }
@SuppressWarnings("unchecked") @Override public final void mapSingleDocument(int docId, BoboSegmentReader reader) { if (docIdIndex < BUFFER_SIZE - 1) { partialDocIds[docIdIndex++] = docId; return; } if (docIdIndex == BUFFER_SIZE - 1) { partialDocIds[docIdIndex++] = docId; ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (reader.getInnerReader()); DocIDMapperImpl docIDMapper = (DocIDMapperImpl) zoieReader.getDocIDMapper(); Serializable mapResult = mapReduceStrategy .map(new DefaultIntArray(partialDocIds), BUFFER_SIZE, zoieReader.getUIDArray(), fieldAccessorFactory.getAccessor(facetInfos, reader, docIDMapper), FacetCountAccessor.EMPTY); if (mapResult != null) { result.getMapResults().add(mapResult); } docIdIndex = 0; } }
@SuppressWarnings("unchecked") @Override public void mapFullIndexReader(BoboSegmentReader reader, FacetCountCollector[] facetCountCollectors) { ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (reader.getInnerReader()); DocIDMapperImpl docIDMapper = (DocIDMapperImpl) zoieReader.getDocIDMapper(); IntArray docArray = fieldAccessorFactory.getDocArray(reader); Serializable mapResult = mapReduceStrategy.map(docArray, docArray.size(), zoieReader.getUIDArray(), fieldAccessorFactory.getAccessor(facetInfos, reader, docIDMapper), new FacetCountAccessor(facetCountCollectors)); if (mapResult != null) { result.getMapResults().add(mapResult); } }
throws IOException { ZoieSegmentReader<?> zoieReader = (ZoieSegmentReader<?>) (reader.getInnerReader()); DocIDMapper docidMapper = zoieReader.getDocIDMapper();