/*
  * 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());
            }
          }
        }
      }
    }
  }
Exemplo n.º 3
0
 /** @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));
   }
 }