Hi all, I'm using 4.10.2. I have a Long "id" field. Each document has one "id" value. I am creating a look-up between Lucene's internal document id and my "id" values by enumerating the inverted index:
private long[] cacheDocIds() throws IOException { long[] ourIds = new long[reader.maxDoc()]; Bits liveDocs = MultiFields.getLiveDocs(reader); Fields fields = MultiFields.getFields(reader); Terms terms = fields.terms("id"); TermsEnum iterator = terms.iterator(null); BytesRef bytesRef = null; while ((bytesRef = iterator.next()) != null) { DocsEnum docsEnum = iterator.docs(liveDocs, null, DocsEnum.FLAG_NONE); int luceneId = docsEnum.nextDoc(); long ourId = NumericUtils.prefixCodedToLong(bytesRef); System.out.println(luceneId + " " + ourId); ourIds[luceneId] = ourId; } return ourIds; } With 5 documents (1, 2, 3, 4, 5) I get this output from the above code: 0 1 1 2 2 3 3 4 4 5 0 0 0 0 0 0 I don't understand why there are three zeroes at the end. - reader.maxDoc is 5 and no documents have been deleted. - I have tried this with a varying number of documents and there are always three zeroes at the end. - I tried changing version to Lucene 4.10.0 and Lucene 4.9 and the same behavior occurs. I can work around this with but I'm just curious if this behavior is expected? Regards, Barry