@Override public boolean nextCandidateDocument() throws IOException { boolean more = true; // The first time nextCandidateDocument is called, we must not advance the // underlying scorers as they have been already advanced during the queue init if (currentDoc != -1) { // if not called for the first time more = nodeScorerQueue.nextCandidateDocumentAndAdjustElsePop(); } currentDoc = nodeScorerQueue.doc(); currentNode = nodeScorerQueue.node(); return more; }
@Test public void testNextCandidateDocumentAndAdjustElsePop() throws IOException { this.addDocument("\"term1\" \"term2\" . \"term3\" . \"term4\" . "); this.addDocument("\"term5\" \"term2\" . \"term3\" . "); final NodeDisjunctionScorerQueue q = new NodeDisjunctionScorerQueue(4); q.put(this.getScorer(ntq("term2"))); q.put(this.getScorer(ntq("term3"))); q.put(this.getScorer(ntq("term4"))); q.put(this.getScorer(ntq("term5"))); assertEquals(0, q.doc()); assertEquals(4, q.size()); assertTrue(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(1, q.doc()); assertEquals(3, q.size()); // term4 scorer should have been removed assertFalse(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(DocsAndNodesIterator.NO_MORE_DOC, q.doc()); assertEquals(DocsAndNodesIterator.NO_MORE_NOD, q.node()); }
@Test public void testNrMatches() throws IOException { this.addDocument("\"term1\" \"term2\" . \"term3\" . \"term4\" . "); this.addDocument("\"term2\" \"term3\" . \"term5\" . "); this.addDocument("\"term2\" \"term1 term5\" . "); final NodeDisjunctionScorerQueue q = new NodeDisjunctionScorerQueue(2); q.put(this.getScorer(ntq("term1"))); q.put(this.getScorer(ntq("term5"))); assertEquals(0, q.doc()); assertTrue(q.nextNodeAndAdjust()); q.countAndSumMatchers(); // there must be 1 matchers for node {0,0} assertEquals(1, q.nrMatchersInNode()); assertTrue(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(1, q.doc()); assertTrue(q.nextNodeAndAdjust()); q.countAndSumMatchers(); // there must be 1 matchers for node {1,0} assertEquals(1, q.nrMatchersInNode()); assertTrue(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(2, q.doc()); assertTrue(q.nextNodeAndAdjust()); q.countAndSumMatchers(); // there must be 2 matchers for node {0,1} assertEquals(2, q.nrMatchersInNode()); }
assertEquals(DocsAndNodesIterator.NO_MORE_NOD, q.node()); assertTrue(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(1, q.doc()); assertTrue(q.nextNodeAndAdjust()); assertEquals(DocsAndNodesIterator.NO_MORE_NOD, q.node()); assertTrue(q.nextCandidateDocumentAndAdjustElsePop()); assertEquals(2, q.doc()); assertTrue(q.nextNodeAndAdjust()); assertEquals(DocsAndNodesIterator.NO_MORE_NOD, q.node()); assertFalse(q.nextCandidateDocumentAndAdjustElsePop());