diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
index b09d82981..f91827f84 100644
--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
+++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
@@ -74,6 +74,11 @@ public class PredicateDerefQuery extends Query {
* The scorer of the name test query
*/
private Scorer nameTestScorer;
+
+ /**
+ * Flag indicating if the children have already been calculated
+ */
+ private boolean childrenCalculated = false;
/**
* Creates a new DerefQuery based on a context
* query.
@@ -203,6 +208,7 @@ public class PredicateDerefQuery extends Query {
public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder,
boolean topScorer) throws IOException {
subQueryScorer = subQuery.weight(searcher).scorer(reader, scoreDocsInOrder, false);
+ childrenCalculated = false;
if (nameTest != null) {
nameTestScorer = new NameQuery(nameTest, version, nsMappings).weight(searcher).scorer(reader, scoreDocsInOrder, false);
}
@@ -311,58 +317,62 @@ public class PredicateDerefQuery extends Query {
* @throws IOException
*/
private void calculateChildren() throws IOException {
+
+ if (!childrenCalculated) {
// subQueryHits.clear();
// hits.clear();
- subQueryScorer.score(new AbstractHitCollector() {
- @Override
- protected void collect(int doc, float score) {
- subQueryHits.set(doc);
- }
- });
+ subQueryScorer.score(new AbstractHitCollector() {
+ @Override
+ protected void collect(int doc, float score) {
+ subQueryHits.set(doc);
+ }
+ });
- TermDocs termDocs = reader.termDocs(new Term(FieldNames.PROPERTIES_SET, refProperty));
- String prefix = FieldNames.createNamedValue(refProperty, "");
- while (termDocs.next()) {
- int doc = termDocs.doc();
+ TermDocs termDocs = reader.termDocs(new Term(FieldNames.PROPERTIES_SET, refProperty));
+ String prefix = FieldNames.createNamedValue(refProperty, "");
+ while (termDocs.next()) {
+ int doc = termDocs.doc();
- String[] values = reader.document(doc).getValues(FieldNames.PROPERTIES);
- if (values == null) {
- // no reference properties at all on this node
- continue;
- }
- for (int v = 0; v < values.length; v++) {
- if (values[v].startsWith(prefix)) {
- String uuid = values[v].substring(prefix.length());
-
- TermDocs node = reader.termDocs(TermFactory.createUUIDTerm(uuid));
- try {
- while (node.next()) {
- if (subQueryHits.get(node.doc())) {
- hits.set(doc);
+ String[] values = reader.document(doc).getValues(FieldNames.PROPERTIES);
+ if (values == null) {
+ // no reference properties at all on this node
+ continue;
+ }
+ for (int v = 0; v < values.length; v++) {
+ if (values[v].startsWith(prefix)) {
+ String uuid = values[v].substring(prefix.length());
+
+ TermDocs node = reader.termDocs(TermFactory.createUUIDTerm(uuid));
+ try {
+ while (node.next()) {
+ if (subQueryHits.get(node.doc())) {
+ hits.set(doc);
+ }
}
+ } finally {
+ node.close();
}
- } finally {
- node.close();
}
}
}
- }
- // collect nameTest hits
- final BitSet nameTestHits = new BitSet();
- if (nameTestScorer != null) {
- nameTestScorer.score(new AbstractHitCollector() {
- @Override
- protected void collect(int doc, float score) {
- nameTestHits.set(doc);
- }
- });
- }
+ // collect nameTest hits
+ final BitSet nameTestHits = new BitSet();
+ if (nameTestScorer != null) {
+ nameTestScorer.score(new AbstractHitCollector() {
+ @Override
+ protected void collect(int doc, float score) {
+ nameTestHits.set(doc);
+ }
+ });
+ }
- // filter out the target nodes that do not match the name test
- // if there is any name test at all.
- if (nameTestScorer != null) {
- hits.and(nameTestHits);
+ // filter out the target nodes that do not match the name test
+ // if there is any name test at all.
+ if (nameTestScorer != null) {
+ hits.and(nameTestHits);
+ }
+ childrenCalculated = true;
}
}
}
diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml
index b7fc310fe..39cf95ddf 100644
--- a/jackrabbit-parent/pom.xml
+++ b/jackrabbit-parent/pom.xml
@@ -499,7 +499,7 @@
org.apache.lucene
lucene-core
- 3.6.0
+ 3.6.2
org.apache.tika