I recently helped diagnose some strange errors with ToChildBlockJoinQuery in an older version of Solr which lead me to realize that the problem seemed to have been fixed by
LUCENE-6593 – however the tests Adrien added in that issue focused specifically the interaction of ToChildBlockJoinScorer with with the (fairly new) aproximations support in Scorers (evidently that was trigger that caused Adrien to investigate and make the fixes).
However, in my initial diagnoses / testing, there were at least 2 (non aproximation based) situations where the old code was problematic:
- ToChildBlockJoinScorer.advance didn't satisfy the "nextDoc equivilent behavior" contract in the special case where the first doc in a segment was a parent w/o any kids
- in indexes that used multiple levels of hierarchy, a BooleanQuery that combined multiple ToChildBlockJoinQueries using different parent filters – ie: "find docs that are children of X and grandchildren of Y"
As mentioned, Adrien's changes in
LUCENE-6593 seemed to fix both of these problematic situations, but I'm opening this issue to track the addition of some new tests to explicitly cover these situations to protect us against future regression.