Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java (revision 45) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java (revision ) @@ -54,6 +54,7 @@ import java.util.Map; import javax.jcr.ItemNotFoundException; +import javax.jcr.NodeIterator; import javax.jcr.PathNotFoundException; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; @@ -402,18 +403,17 @@ NodeImpl ancestor = (NodeImpl) session.getNode(dn.getAncestorPath()); ids.add(ancestor.getNodeId()); while (!ids.isEmpty()) { - String id = ids.removeFirst().toString(); - Query q = new JackrabbitTermQuery(new Term(FieldNames.PARENT, id)); - QueryHits hits = searcher.evaluate(q); - ScoreNode sn = hits.nextScoreNode(); - if (sn != null) { + NodeId id = ids.removeFirst(); + NodeImpl curNode = (NodeImpl) session.getNodeById(id); + Query q = new JackrabbitTermQuery(new Term(FieldNames.PARENT, id.toString())); + NodeIterator childs = curNode.getNodes(); + if (childs.hasNext()) { query.add(q, SHOULD); - do { - ids.add(sn.getNodeId()); - sn = hits.nextScoreNode(); - } while (sn != null); } + while (childs.hasNext()) { + ids.add(((NodeImpl)childs.nextNode()).getNodeId()); - } + } + } } catch (PathNotFoundException e) { query.add(new JackrabbitTermQuery(new Term( FieldNames.UUID, "invalid-node-id")), // never matches