You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/01/15 11:17:28 UTC
svn commit: r1558336 - in /lucene/dev/branches/lucene_solr_4_6: ./ lucene/
lucene/join/ lucene/join/src/java/org/apache/lucene/search/join/
lucene/join/src/test/org/apache/lucene/search/join/
Author: mikemccand
Date: Wed Jan 15 10:17:27 2014
New Revision: 1558336
URL: http://svn.apache.org/r1558336
Log:
LUCENE-5375: ToChildBlockJoinQuery works harder to detect mis-use, where the parent query incorrectly returns child docs
Added:
lucene/dev/branches/lucene_solr_4_6/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinValidation.java
- copied unchanged from r1558335, lucene/dev/branches/branch_4x/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoinValidation.java
Modified:
lucene/dev/branches/lucene_solr_4_6/ (props changed)
lucene/dev/branches/lucene_solr_4_6/lucene/ (props changed)
lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt
lucene/dev/branches/lucene_solr_4_6/lucene/join/ (props changed)
lucene/dev/branches/lucene_solr_4_6/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java
Modified: lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt?rev=1558336&r1=1558335&r2=1558336&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt Wed Jan 15 10:17:27 2014
@@ -23,6 +23,10 @@ Bug fixes
* LUCENE-5394: Fix TokenSources.getTokenStream to return payloads if
they were indexed with the term vectors. (Mike McCandless)
+* LUCENE-5375: ToChildBlockJoinQuery works harder to detect mis-use,
+ when the parent query incorrectly returns child documents, and throw
+ a clear exception saying so. (Dr. Oleg Savrasov via Mike McCandless)
+
======================= Lucene 4.6.0 =======================
New Features
Modified: lucene/dev/branches/lucene_solr_4_6/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java?rev=1558336&r1=1558335&r2=1558336&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/join/src/java/org/apache/lucene/search/join/ToChildBlockJoinQuery.java Wed Jan 15 10:17:27 2014
@@ -24,7 +24,6 @@ import java.util.Set;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter; // javadocs
import org.apache.lucene.index.Term;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Explanation;
@@ -32,7 +31,6 @@ import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
-import org.apache.lucene.search.Scorer.ChildScorer;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FixedBitSet;
@@ -48,6 +46,8 @@ import org.apache.lucene.util.FixedBitSe
public class ToChildBlockJoinQuery extends Query {
+ public static final String INVALID_QUERY_MESSAGE = "Parent query yields document which is not matched by parents filter, docID=";
+
private final Filter parentsFilter;
private final Query parentQuery;
@@ -203,6 +203,7 @@ public class ToChildBlockJoinQuery exten
// children:
while (true) {
parentDoc = parentScorer.nextDoc();
+ validateParentDoc();
if (parentDoc == 0) {
// Degenerate but allowed: parent has no children
@@ -211,6 +212,7 @@ public class ToChildBlockJoinQuery exten
// tricky because scorer must return -1 for
// .doc() on init...
parentDoc = parentScorer.nextDoc();
+ validateParentDoc();
}
if (parentDoc == NO_MORE_DOCS) {
@@ -248,6 +250,14 @@ public class ToChildBlockJoinQuery exten
}
}
+ /** Detect mis-use, where provided parent query in fact
+ * sometimes returns child documents. */
+ private void validateParentDoc() {
+ if (parentDoc != NO_MORE_DOCS && !parentBits.get(parentDoc)) {
+ throw new IllegalStateException(INVALID_QUERY_MESSAGE + parentDoc);
+ }
+ }
+
@Override
public int docID() {
return childDoc;
@@ -277,6 +287,7 @@ public class ToChildBlockJoinQuery exten
if (childDoc == -1 || childTarget > parentDoc) {
// Advance to new parent:
parentDoc = parentScorer.advance(childTarget);
+ validateParentDoc();
//System.out.println(" advance to parentDoc=" + parentDoc);
assert parentDoc > childTarget;
if (parentDoc == NO_MORE_DOCS) {