Index: solr/src/java/org/apache/solr/search/function/QueryValueSource.java =================================================================== --- solr/src/java/org/apache/solr/search/function/QueryValueSource.java (revision 1065253) +++ solr/src/java/org/apache/solr/search/function/QueryValueSource.java (working copy) @@ -97,11 +97,15 @@ if (w == null) { IndexSearcher weightSearcher; if(fcontext == null) { - weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext); + // nocommit + //weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext); + weightSearcher = new IndexSearcher(readerContext); } else { weightSearcher = (IndexSearcher)fcontext.get("searcher"); if (weightSearcher == null) { - weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext); + // nocommit + //weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext); + weightSearcher = new IndexSearcher(readerContext); } } w = q.weight(weightSearcher); Index: lucene/src/java/org/apache/lucene/search/IndexSearcher.java =================================================================== --- lucene/src/java/org/apache/lucene/search/IndexSearcher.java (revision 1065253) +++ lucene/src/java/org/apache/lucene/search/IndexSearcher.java (working copy) @@ -153,7 +153,8 @@ } /** - * Creates a searcher searching the provided top-level {@link ReaderContext}. + * Creates a searcher searching the provided top-level or + * atomic {@link ReaderContext}. * * @see ReaderContext * @see IndexReader#getTopReaderContext() @@ -169,12 +170,17 @@ } private IndexSearcher(ReaderContext context, boolean closeReader, ExecutorService executor) { - assert context.isTopLevel: "IndexSearcher's ReaderContext must be topLevel for reader" + context.reader; + // nocommit + //assert context.isTopLevel: "IndexSearcher's ReaderContext must be topLevel for reader" + context.reader; reader = context.reader; this.executor = executor; this.closeReader = closeReader; this.readerContext = context; - leafContexts = ReaderUtil.leaves(context); + if (context.isTopLevel) { + leafContexts = ReaderUtil.leaves(context); + } else { + leafContexts = new AtomicReaderContext[] {(AtomicReaderContext) context}; + } if (executor == null) { subSearchers = null; @@ -184,7 +190,7 @@ if (leafContexts[i].reader == context.reader) { subSearchers[i] = this; } else { - subSearchers[i] = new IndexSearcher(context, leafContexts[i]); + subSearchers[i] = new IndexSearcher(leafContexts[i]); } } } @@ -200,7 +206,8 @@ * * @lucene.experimental * */ - public IndexSearcher(ReaderContext topLevel, AtomicReaderContext... leaves) { + /* + public IndexSearcher(ReaderContext topLevel, AtomicReaderContext leaf) { assert assertLeaves(topLevel, leaves); readerContext = topLevel; reader = topLevel.reader; @@ -209,6 +216,7 @@ subSearchers = null; closeReader = false; } + */ private boolean assertLeaves(ReaderContext topLevel, AtomicReaderContext... leaves) { for (AtomicReaderContext leaf : leaves) {