You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ca...@apache.org on 2015/12/23 09:20:17 UTC

svn commit: r1721503 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/ test/java/org/apache/jackrabbit/oak/plugins/index/lucene/

Author: catholicon
Date: Wed Dec 23 08:20:17 2015
New Revision: 1721503

URL: http://svn.apache.org/viewvc?rev=1721503&view=rev
Log:
OAK-3576: Allow custom extension to augment indexed lucene documents
Update FulltextQueryTermsProvider#getQueryTerm to get NodeState of index definition being used to serve the query

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/FulltextQueryTermsProvider.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java?rev=1721503&r1=1721502&r2=1721503&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java Wed Dec 23 08:20:17 2015
@@ -162,11 +162,11 @@ public class IndexAugmentorFactory {
         }
 
         @Override
-        public Query getQueryTerm(final String text, final Analyzer analyzer) {
+        public Query getQueryTerm(final String text, final Analyzer analyzer, NodeState indexDefinition) {
             List<Query> subQueries = Lists.newArrayList();
             for (FulltextQueryTermsProvider fulltextQueryTermsProvider : providers) {
                 final long start = PERFLOG.start();
-                Query subQuery = fulltextQueryTermsProvider.getQueryTerm(text, analyzer);
+                Query subQuery = fulltextQueryTermsProvider.getQueryTerm(text, analyzer, indexDefinition);
                 PERFLOG.end(start, 1, "fulltextQueryTermsProvider: {}, text: {}", fulltextQueryTermsProvider, text);
                 if (subQuery != null) {
                     subQueries.add(subQuery);

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=1721503&r1=1721502&r2=1721503&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 Wed Dec 23 08:20:17 2015
@@ -825,10 +825,9 @@ public class LucenePropertyIndex impleme
     }
     private static FulltextQueryTermsProvider getIndexAgumentor(IndexPlan plan, IndexAugmentorFactory augmentorFactory) {
         PlanResult planResult = getPlanResult(plan);
-        IndexDefinition defn = planResult.indexDefinition;
 
-        if (augmentorFactory != null && defn.getVersion().isAtLeast(IndexFormatVersion.V2)){
-            return augmentorFactory.getFulltextQueryTermsProvider(getPlanResult(plan).indexingRule.getNodeTypeName());
+        if (augmentorFactory != null){
+            return augmentorFactory.getFulltextQueryTermsProvider(planResult.indexingRule.getNodeTypeName());
         }
 
         return null;
@@ -1234,7 +1233,7 @@ public class LucenePropertyIndex impleme
 
             private boolean visitTerm(String propertyName, String text, String boost, boolean not) {
                 String p = getLuceneFieldName(propertyName, pr);
-                Query q = tokenToQuery(text, p, pr.indexingRule, analyzer, augmentor);
+                Query q = tokenToQuery(text, p, pr, analyzer, augmentor);
                 if (q == null) {
                     return false;
                 }
@@ -1280,8 +1279,10 @@ public class LucenePropertyIndex impleme
         return p;
     }
 
-    private static Query tokenToQuery(String text, String fieldName, IndexingRule indexingRule, Analyzer analyzer, FulltextQueryTermsProvider augmentor) {
+    private static Query tokenToQuery(String text, String fieldName, PlanResult pr, Analyzer analyzer,
+                                      FulltextQueryTermsProvider augmentor) {
         Query ret;
+        IndexingRule indexingRule = pr.indexingRule;
         //Expand the query on fulltext field
         if (FieldNames.FULLTEXT.equals(fieldName) &&
                 !indexingRule.getNodeScopeAnalyzedProps().isEmpty()) {
@@ -1302,7 +1303,7 @@ public class LucenePropertyIndex impleme
 
         //Augment query terms if available (as a 'SHOULD' clause)
         if (augmentor != null && FieldNames.FULLTEXT.equals(fieldName)) {
-            Query subQuery = augmentor.getQueryTerm(text, analyzer);
+            Query subQuery = augmentor.getQueryTerm(text, analyzer, pr.indexDefinition.getDefinitionNodeState());
             if (subQuery != null) {
                 BooleanQuery query = new BooleanQuery();
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/FulltextQueryTermsProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/FulltextQueryTermsProvider.java?rev=1721503&r1=1721502&r2=1721503&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/FulltextQueryTermsProvider.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/spi/FulltextQueryTermsProvider.java Wed Dec 23 08:20:17 2015
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.lucene.spi;
 
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.Query;
 
@@ -33,7 +34,7 @@ public interface FulltextQueryTermsProvi
      */
     FulltextQueryTermsProvider DEFAULT = new FulltextQueryTermsProvider() {
         @Override
-        public Query getQueryTerm(String text, Analyzer analyzer) {
+        public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
             return null;
         }
 
@@ -47,10 +48,11 @@ public interface FulltextQueryTermsProvi
      * field.
      * @param text full text term
      * @param analyzer {@link Analyzer} being used while forming the query. Can be used to analyze text consistently.
+     * @param indexDefinition {@link NodeState} of index definition
      * @return {@link Query} object to be OR'ed with query being prepared. {@code null}, if nothing is to be added.
      */
     @CheckForNull
-    Query getQueryTerm(String text, Analyzer analyzer);
+    Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition);
 
     /**
      * This method is used to find which node types are supported by the implementation. Based, on the index

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java?rev=1721503&r1=1721502&r2=1721503&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java Wed Dec 23 08:20:17 2015
@@ -111,7 +111,7 @@ public class IndexAugmentorFactoryTest {
 
     void validateComposedQueryTerms(String type, String ... expected) {
         FulltextQueryTermsProvider compositeQueryTermsProvider = indexAugmentorFactory.getFulltextQueryTermsProvider(type);
-        Query q = compositeQueryTermsProvider.getQueryTerm(null, null);
+        Query q = compositeQueryTermsProvider.getQueryTerm(null, null, null);
         if (q == null) {
             assertEquals("No query terms generated for " + type + ".", 0, expected.length);
         } else {
@@ -172,7 +172,7 @@ public class IndexAugmentorFactoryTest {
         }
 
         @Override
-        public Query getQueryTerm(String text, Analyzer analyzer) {
+        public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
             return id;
         }
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java?rev=1721503&r1=1721502&r2=1721503&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java Wed Dec 23 08:20:17 2015
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProviderFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.spi.FulltextQueryTermsProvider;
@@ -100,7 +101,7 @@ public class LuceneIndexAugmentTest exte
         final String realSearchText = "bar";
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 assertEquals("Full text term passed to provider isn't same as the one passed in query",
                         testSearchText, text);
                 return new TermQuery(new Term(":fulltext", realSearchText));
@@ -237,7 +238,7 @@ public class LuceneIndexAugmentTest exte
         //Set a very sad query augmentor
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 return null;
             }
 
@@ -252,7 +253,7 @@ public class LuceneIndexAugmentTest exte
         //Set query augmentor... with null query
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 return null;
             }
 
@@ -267,7 +268,7 @@ public class LuceneIndexAugmentTest exte
         //Set query augmentor... with some query
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 return new TermQuery(new Term("bar", "baz"));
             }
 
@@ -353,7 +354,7 @@ public class LuceneIndexAugmentTest exte
         final AtomicInteger queryingCounter = new AtomicInteger(0);
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 queryingCounter.set(1);
                 return null;
             }
@@ -416,7 +417,7 @@ public class LuceneIndexAugmentTest exte
         final AtomicInteger queryingCounter = new AtomicInteger(0);
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 queryingCounter.set(1);
                 return null;
             }
@@ -483,7 +484,7 @@ public class LuceneIndexAugmentTest exte
         final AtomicInteger queryingCounter = new AtomicInteger(0);
         factory.fulltextQueryTermsProvider = new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 queryingCounter.set(1);
                 return null;
             }
@@ -588,7 +589,7 @@ public class LuceneIndexAugmentTest exte
         final AtomicInteger indexingCounter2 = new AtomicInteger(0);
         factory.registerQueryTermsProvider(new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 indexingCounter1.set(1);
                 return null;
             }
@@ -601,7 +602,7 @@ public class LuceneIndexAugmentTest exte
         });
         factory.registerQueryTermsProvider(new FulltextQueryTermsProvider() {
             @Override
-            public Query getQueryTerm(String text, Analyzer analyzer) {
+            public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
                 indexingCounter2.set(1);
                 return null;
             }