Author: chetanm
Date: Tue Oct  3 05:11:37 2017
New Revision: 1810653

URL: http://svn.apache.org/viewvc?rev=1810653&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes

- Handle relative property transformation

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1810653&r1=1810652&r2=1810653&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
 Tue Oct  3 05:11:37 2017
@@ -34,7 +34,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
+import com.google.common.base.Predicates;
 import com.google.common.collect.AbstractIterator;
+import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Queues;
@@ -125,6 +127,7 @@ import org.slf4j.LoggerFactory;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Predicates.notNull;
 import static com.google.common.collect.Lists.newArrayListWithCapacity;
 import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
@@ -1553,6 +1556,7 @@ public class LucenePropertyIndex impleme
         return NumericRangeQuery.newIntRange(FieldNames.PATH_DEPTH, depth, 
depth, true, true);
     }
 
+    @SuppressWarnings("Guava")
     private static Iterator<LuceneResultRow> 
mergePropertyIndexResult(IndexPlan plan, NodeState rootState,
                                                                       
Iterator<LuceneResultRow> itr) {
         PlanResult pr = getPlanResult(plan);
@@ -1560,11 +1564,16 @@ public class LucenePropertyIndex impleme
                 NodeStateUtils.getNode(rootState, pr.indexPath));
         PropertyIndexResult pir = pr.getPropertyIndexResult();
         Iterable<String> paths = lookup.query(plan.getFilter(), pir.pd, 
pir.propertyName, pir.pr);
-        Iterator<LuceneResultRow> propIndexItr = 
Iterators.transform(paths.iterator(),
-                (path) -> new LuceneResultRow(path, 0, null, null, null));
+
+        //No need for path restriction evaluation as thats taken care by 
PropertyIndex impl itself
+        //via content mirror strategy
+        FluentIterable<LuceneResultRow> propIndex = FluentIterable.from(paths)
+                .transform(path -> pr.isPathTransformed() ? 
pr.transformPath(path) : path)
+                .filter(notNull())
+                .transform(path -> new LuceneResultRow(path, 0, null, null, 
null));
 
         //Property index itr should come first
-        return Iterators.concat(propIndexItr, itr);
+        return Iterators.concat(propIndex.iterator(), itr);
     }
 
     static class LuceneResultRow {

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java?rev=1810653&r1=1810652&r2=1810653&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/SynchronousPropertyIndexTest.java
 Tue Oct  3 05:11:37 2017
@@ -272,6 +272,22 @@ public class SynchronousPropertyIndexTes
                 containsString("sync:(foo bar)"));
     }
 
+
+    @Test
+    public void relativePropertyTransform() throws Exception{
+        defnb.async("async", "nrt");
+        defnb.indexRule("nt:base").property("foo").sync();
+
+        addIndex(indexPath, defnb);
+        root.commit();
+
+        createPath("/a/jcr:content").setProperty("foo", "bar");
+        createPath("/b").setProperty("foo", "bar");
+        root.commit();
+
+        assertQuery("select * from [nt:base] where [jcr:content/foo] = 'bar'", 
singletonList("/a"));
+    }
+
     private void runAsyncIndex() {
         AsyncIndexUpdate async = (AsyncIndexUpdate) 
WhiteboardUtils.getService(wb,
                 Runnable.class, input -> input instanceof AsyncIndexUpdate);


Reply via email to