From f18cb90104a0e55f91ce75d726cb489eb5cbf258 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Mon, 11 Apr 2016 09:20:39 +0200 Subject: [PATCH] LUCENE-7187: Block join queries' Weight#extractTerms(...) implementations should delegate to the wrapped weight. --- lucene/CHANGES.txt | 3 ++ .../search/join/ToChildBlockJoinQuery.java | 4 ++- .../search/join/ToParentBlockJoinQuery.java | 6 ++-- .../lucene/search/join/TestBlockJoin.java | 32 ++++++++++++++++++- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index f28254dc460..63a32254297 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -66,6 +66,9 @@ Bug Fixes * LUCENE-7168: Switch to stable encode for geo3d, remove quantization test leniency, remove dead code (Mike McCandless) +* LUCENE-7187: Block join queries' Weight#extractTerms(...) implementations + should delegate to the wrapped weight. (Martijn van Groningen) + Other * LUCENE-7174: Upgrade randomizedtesting to 2.3.4. (Uwe Schindler, Dawid Weiss) diff --git a/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java b/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java index d381caeaa6e..237b78696d2 100644 --- a/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java +++ b/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java @@ -103,7 +103,9 @@ public class ToChildBlockJoinQuery extends Query { } @Override - public void extractTerms(Set terms) {} + public void extractTerms(Set terms) { + parentWeight.extractTerms(terms); + } @Override public float getValueForNormalization() throws IOException { diff --git a/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java b/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java index f004fde9735..2a0ebaf2ba7 100644 --- a/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java +++ b/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinQuery.java @@ -125,21 +125,21 @@ public class ToParentBlockJoinQuery extends Query { } private static class BlockJoinWeight extends Weight { - private final Query joinQuery; private final Weight childWeight; private final BitSetProducer parentsFilter; private final ScoreMode scoreMode; public BlockJoinWeight(Query joinQuery, Weight childWeight, BitSetProducer parentsFilter, ScoreMode scoreMode) { super(joinQuery); - this.joinQuery = joinQuery; this.childWeight = childWeight; this.parentsFilter = parentsFilter; this.scoreMode = scoreMode; } @Override - public void extractTerms(Set terms) {} + public void extractTerms(Set terms) { + childWeight.extractTerms(terms); + } @Override public float getValueForNormalization() throws IOException { diff --git a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java index 01a81351511..a67b0ec28bd 100644 --- a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java +++ b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java @@ -20,8 +20,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.document.Document; @@ -101,7 +103,35 @@ public class TestBlockJoin extends LuceneTestCase { job.add(new IntPoint("year", year)); return job; } - + + public void testExtractTerms() throws Exception { + TermQuery termQuery = new TermQuery(new Term("field", "value")); + QueryBitSetProducer bitSetProducer = new QueryBitSetProducer(new MatchNoDocsQuery()); + ToParentBlockJoinQuery toParentBlockJoinQuery = new ToParentBlockJoinQuery(termQuery, bitSetProducer, ScoreMode.None); + ToChildBlockJoinQuery toChildBlockJoinQuery = new ToChildBlockJoinQuery(toParentBlockJoinQuery, bitSetProducer); + + Directory directory = newDirectory(); + final IndexWriter w = new IndexWriter(directory, new IndexWriterConfig(new MockAnalyzer(random()))); + w.close(); + IndexReader indexReader = DirectoryReader.open(directory); + IndexSearcher indexSearcher = new IndexSearcher(indexReader); + + Weight weight = toParentBlockJoinQuery.createWeight(indexSearcher, false); + Set terms = new HashSet<>(); + weight.extractTerms(terms); + Term[] termArr =terms.toArray(new Term[0]); + assertEquals(1, termArr.length); + + weight = toChildBlockJoinQuery.createWeight(indexSearcher, false); + terms = new HashSet<>(); + weight.extractTerms(terms); + termArr =terms.toArray(new Term[0]); + assertEquals(1, termArr.length); + + indexReader.close(); + directory.close(); + } + public void testEmptyChildFilter() throws Exception { final Directory dir = newDirectory(); final IndexWriterConfig config = new IndexWriterConfig(new MockAnalyzer(random()));