/* * LUCENE-6006: Test undead norms. * ..... * C C / * /< / * ___ __________/_#__=o * /(- /(\_\________ \ * \ ) \ )_ \o \ * /|\ /|\ |' | * | _| * /o __\ * / ' | * / / | * /_/\______| * ( _( < * \ \ \ * \ \ | * \____\____\ * ____\_\__\_\ * /` /` o\ * |___ |_______| * */ public void testReadUndeadNorms() throws Exception { InputStream resource = TestLucene42NormsFormat.class.getResourceAsStream("index.42.undeadnorms.zip"); assertNotNull(resource); Path path = createTempDir("undeadnorms"); TestUtil.unzip(resource, path); Directory dir = FSDirectory.open(path); IndexReader r = DirectoryReader.open(dir); NumericDocValues undeadNorms = MultiDocValues.getNormValues(r, "content"); assertNotNull(undeadNorms); assertEquals(2, r.maxDoc()); assertEquals(0, undeadNorms.get(0)); assertEquals(0, undeadNorms.get(1)); dir.close(); r.close(); }
private void duellReaders(CompositeReader other, LeafReader memIndexReader) throws IOException { Fields memFields = memIndexReader.fields(); for (String field : MultiFields.getFields(other)) { Terms memTerms = memFields.terms(field); Terms iwTerms = memIndexReader.terms(field); if (iwTerms == null) { assertNull(memTerms); } else { NumericDocValues normValues = MultiDocValues.getNormValues(other, field); NumericDocValues memNormValues = memIndexReader.getNormValues(field); if (normValues != null) { // mem idx always computes norms on the fly assertNotNull(memNormValues); assertEquals(normValues.get(0), memNormValues.get(0)); } assertNotNull(memTerms); assertEquals(iwTerms.getDocCount(), memTerms.getDocCount()); assertEquals(iwTerms.getSumDocFreq(), memTerms.getSumDocFreq()); assertEquals(iwTerms.getSumTotalTermFreq(), memTerms.getSumTotalTermFreq()); TermsEnum iwTermsIter = iwTerms.iterator(); TermsEnum memTermsIter = memTerms.iterator(); if (iwTerms.hasPositions()) { final boolean offsets = iwTerms.hasOffsets() && memTerms.hasOffsets(); while (iwTermsIter.next() != null) { assertNotNull(memTermsIter.next()); assertEquals(iwTermsIter.term(), memTermsIter.term()); PostingsEnum iwDocsAndPos = iwTermsIter.postings(null, PostingsEnum.ALL); PostingsEnum memDocsAndPos = memTermsIter.postings(null, PostingsEnum.ALL); while (iwDocsAndPos.nextDoc() != PostingsEnum.NO_MORE_DOCS) { assertEquals(iwDocsAndPos.docID(), memDocsAndPos.nextDoc()); assertEquals(iwDocsAndPos.freq(), memDocsAndPos.freq()); for (int i = 0; i < iwDocsAndPos.freq(); i++) { assertEquals( "term: " + iwTermsIter.term().utf8ToString(), iwDocsAndPos.nextPosition(), memDocsAndPos.nextPosition()); if (offsets) { assertEquals(iwDocsAndPos.startOffset(), memDocsAndPos.startOffset()); assertEquals(iwDocsAndPos.endOffset(), memDocsAndPos.endOffset()); } if (iwTerms.hasPayloads()) { assertEquals(iwDocsAndPos.getPayload(), memDocsAndPos.getPayload()); } } } } } else { while (iwTermsIter.next() != null) { assertEquals(iwTermsIter.term(), memTermsIter.term()); PostingsEnum iwDocsAndPos = iwTermsIter.postings(null); PostingsEnum memDocsAndPos = memTermsIter.postings(null); while (iwDocsAndPos.nextDoc() != PostingsEnum.NO_MORE_DOCS) { assertEquals(iwDocsAndPos.docID(), memDocsAndPos.nextDoc()); assertEquals(iwDocsAndPos.freq(), memDocsAndPos.freq()); } } } } } }
/** @param reader IndexReader object created in {@link QryEval}. */ public DocLengthStore(IndexReader reader) throws IOException { this.reader = reader; for (String field : MultiFields.getIndexedFields(reader)) { this.values.put(field, MultiDocValues.getNormValues(reader, field)); } }