@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; } }; } }
subreader.setDocIDMapper(new DocIDMapperSub(i, subreader, _partStart, docidArray, start)); subReader.setDocIDMapper(mapper);
public DocIDMapper<?> getDocIDMapper(ZoieMultiReader<?> multireader) { final ZoieSegmentReader<?>[] subreaders =(ZoieSegmentReader<?>[])(multireader.getSequentialSubReaders()); final int[] starts = multireader.getStarts(); for (int i = 0; i < subreaders.length; ++i){ ZoieSegmentReader<?> subReader = subreaders[i]; DocIDMapper<?> mapper = subReader.getDocIDMaper(); if (mapper == null){ mapper = new DocIDMapperImpl(subReader.getUIDArray()); } subReader.setDocIDMapper(mapper); } final DocIDMapper[] mappers = new DocIDMapper[subreaders.length]; for(int i=0; i< subreaders.length; i++) { mappers[i] = subreaders[i].getDocIDMaper(); } final int bound = subreaders.length-1; return new DefaultDocIDMapper(bound, mappers, starts); }