Author: catholicon
Date: Wed Jan  6 12:27:18 2016
New Revision: 1723300

URL: http://svn.apache.org/viewvc?rev=1723300&view=rev
Log:
OAK-3838: IndexPlanner incorrectly lets all full text indices to participate 
for suggest/spellcheck queries

Reverting fix done at r1723142 as oak-core/*/ast isn't exported to be used 
outside oak-core. Would discuss how to handle and fix later

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1723300&r1=1723299&r2=1723300&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Wed Jan  6 12:27:18 2016
@@ -193,10 +193,6 @@ public class SelectorImpl extends Source
         return selectorName;
     }
 
-    public String getNodeTypeName() {
-        return nodeTypeName;
-    }
-
     public boolean matchesAllTypes() {
         return matchesAllTypes;
     }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1723300&r1=1723299&r2=1723300&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 Wed Jan  6 12:27:18 2016
@@ -207,10 +207,6 @@ class IndexDefinition implements Aggrega
 
     private final boolean secureFacets;
 
-    private final boolean suggestEnabled;
-
-    private final boolean spellcheckEnabled;
-
     public IndexDefinition(NodeState root, NodeState defn) {
         this(root, defn, null);
     }
@@ -278,8 +274,6 @@ class IndexDefinition implements Aggrega
         this.saveDirListing = getOptionalValue(defn, 
LuceneIndexConstants.SAVE_DIR_LISTING, true);
         this.suggestAnalyzed = getOptionalValue(defn, 
LuceneIndexConstants.SUGGEST_ANALYZED, false);
         this.secureFacets = defn.hasChildNode(FACETS) && 
getOptionalValue(defn.getChildNode(FACETS), PROP_SECURE_FACETS, true);
-        this.suggestEnabled = evaluateSuggestionEnabled();
-        this.spellcheckEnabled = evaluateSpellcheckEnabled();
     }
 
     public NodeState getDefinitionNodeState() {
@@ -601,7 +595,7 @@ class IndexDefinition implements Aggrega
         return ntBaseRule != null;
     }
 
-    private boolean evaluateSuggestionEnabled() {
+    public boolean isSuggestEnabled() {
         boolean suggestEnabled = false;
         for (IndexingRule indexingRule : definedRules) {
             for (PropertyDefinition propertyDefinition : 
indexingRule.propConfigs.values()) {
@@ -620,33 +614,6 @@ class IndexDefinition implements Aggrega
         return suggestEnabled;
     }
 
-    public boolean isSuggestEnabled() {
-        return suggestEnabled;
-    }
-
-    private boolean evaluateSpellcheckEnabled() {
-        boolean spellcheckEnabled = false;
-        for (IndexingRule indexingRule : definedRules) {
-            for (PropertyDefinition propertyDefinition : 
indexingRule.propConfigs.values()) {
-                if (propertyDefinition.useInSpellcheck) {
-                    spellcheckEnabled = true;
-                    break;
-                }
-            }
-            for (NamePattern np : indexingRule.namePatterns) {
-                if (np.getConfig().useInSpellcheck) {
-                    spellcheckEnabled = true;
-                    break;
-                }
-            }
-        }
-        return spellcheckEnabled;
-    }
-
-    public boolean isSpellcheckEnabled() {
-        return spellcheckEnabled;
-    }
-
     @CheckForNull
     public String getIndexPathFromConfig() {
         return definition.getString(LuceneIndexConstants.INDEX_PATH);
@@ -763,13 +730,6 @@ class IndexDefinition implements Aggrega
             return nodeTypeName;
         }
 
-        /**
-         * @return name of the base node type.
-         */
-        public String getBaseNodeType() {
-            return baseNodeType;
-        }
-
         public List<PropertyDefinition> getNullCheckEnabledProperties() {
             return nullCheckEnabledProperties;
         }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java?rev=1723300&r1=1723299&r2=1723300&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
 Wed Jan  6 12:27:18 2016
@@ -30,7 +30,6 @@ import javax.annotation.CheckForNull;
 
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import 
org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition.IndexingRule;
@@ -140,30 +139,9 @@ class IndexPlanner {
 
         if (definition.hasFunctionDefined()
                 && filter.getPropertyRestriction(definition.getFunctionName()) 
!= null) {
-            boolean canHandleNativeFunction = true;
-
-            PropertyValue pv = 
filter.getPropertyRestriction(definition.getFunctionName()).first;
-            String query = String.valueOf(pv.getValue(pv.getType()));
-
-            if (query.startsWith("suggest?term=")) {
-                if (definition.isSuggestEnabled()) {
-                    canHandleNativeFunction =
-                            
indexingRule.getBaseNodeType().equals(filter.getSelector().getNodeTypeName());
-                } else {
-                    canHandleNativeFunction = false;
-                }
-            } else if (query.startsWith("spellcheck?term=")) {
-                if (definition.isSpellcheckEnabled()) {
-                    canHandleNativeFunction =
-                            
indexingRule.getBaseNodeType().equals(filter.getSelector().getNodeTypeName());
-                } else {
-                    canHandleNativeFunction = false;
-                }
-            }
-
-            //If native function can be handled by this index then ensure
+            //If native function is handled by this index then ensure
             // that lowest cost if returned
-            return canHandleNativeFunction ? 
defaultPlan().setEstimatedEntryCount(1) : null;
+            return defaultPlan().setEstimatedEntryCount(1);
         }
 
         List<String> indexedProps = 
newArrayListWithCapacity(filter.getPropertyRestrictions().size());

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java?rev=1723300&r1=1723299&r2=1723300&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
 Wed Jan  6 12:27:18 2016
@@ -54,7 +54,6 @@ import static javax.jcr.PropertyType.TYP
 import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
 import static org.apache.jackrabbit.oak.api.Type.NAMES;
 import static org.apache.jackrabbit.oak.api.Type.STRINGS;
-import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static 
org.apache.jackrabbit.oak.plugins.index.PathFilter.PROP_INCLUDED_PATHS;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME;
@@ -460,127 +459,6 @@ public class IndexPlannerTest {
         assertNull(plan);
     }
 
-    //------ Suggestion/spellcheck plan tests
-    @Test
-    public void nonSuggestIndex() throws Exception {
-        //An index which doesn't define any property to support suggestions 
shouldn't turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:base";
-        boolean enableSuggestionIndex = false;
-        boolean enableSpellcheckIndex = false;
-        boolean queryForSugggestion = true;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNull(plan);
-    }
-
-    @Test
-    public void nonSpellcheckIndex() throws Exception {
-        //An index which doesn't define any property to support spell check 
shouldn't turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:base";
-        boolean enableSuggestionIndex = false;
-        boolean enableSpellcheckIndex = false;
-        boolean queryForSugggestion = false;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNull(plan);
-    }
-
-    @Test
-    public void simpleSuggestIndexPlan() throws Exception {
-        //An index defining a property for suggestions should turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:base";
-        boolean enableSuggestionIndex = true;
-        boolean enableSpellcheckIndex = false;
-        boolean queryForSugggestion = true;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNotNull(plan);
-    }
-
-    @Test
-    public void simpleSpellcheckIndexPlan() throws Exception {
-        //An index defining a property for spellcheck should turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:base";
-        boolean enableSuggestionIndex = false;
-        boolean enableSpellcheckIndex = true;
-        boolean queryForSugggestion = false;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNotNull(plan);
-    }
-
-    @Test
-    public void suggestionIndexingRuleHierarchy() throws Exception {
-        //An index defining a property for suggestion on a base type shouldn't 
turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:unstructured";
-        boolean enableSuggestionIndex = true;
-        boolean enableSpellcheckIndex = false;
-        boolean queryForSugggestion = true;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNull(plan);
-    }
-
-    @Test
-    public void spellcheckIndexingRuleHierarchy() throws Exception {
-        //An index defining a property for spellcheck on a base type shouldn't 
turn up in plan.
-        String indexNodeType = "nt:base";
-        String queryNodeType = "nt:unstructured";
-        boolean enableSuggestionIndex = false;
-        boolean enableSpellcheckIndex = true;
-        boolean queryForSugggestion = false;
-
-        IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, 
enableSuggestionIndex, enableSpellcheckIndex);
-        QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, 
queryNodeType, queryForSugggestion);
-
-        assertNull(plan);
-    }
-
-    private IndexNode createSuggestionOrSpellcheckIndex(String nodeType,
-                                                        boolean 
enableSuggestion,
-                                                        boolean 
enableSpellcheck) throws Exception {
-        NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", 
of("foo"), "async");
-        defn.setProperty(DECLARING_NODE_TYPES, nodeType);
-
-        defn = IndexDefinition.updateDefinition(defn.getNodeState().builder());
-        NodeBuilder foob = getNode(defn, "indexRules/" + nodeType + 
"/properties/foo");
-        foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true);
-        if (enableSuggestion) {
-            foob.setProperty(LuceneIndexConstants.PROP_USE_IN_SUGGEST, true);
-        } if (enableSpellcheck) {
-            foob.setProperty(LuceneIndexConstants.PROP_USE_IN_SPELLCHECK, 
true);
-        }
-
-        IndexDefinition indexDefinition = new IndexDefinition(root, 
defn.getNodeState());
-        return createIndexNode(indexDefinition);
-    }
-
-    private QueryIndex.IndexPlan getSuggestOrSpellcheckIndexPlan(IndexNode 
indexNode, String nodeType,
-                                                                 boolean 
forSugggestion) throws Exception {
-        FilterImpl filter = createFilter(nodeType);
-        filter.restrictProperty(indexNode.getDefinition().getFunctionName(), 
Operator.EQUAL,
-                
PropertyValues.newString((forSugggestion?"suggest":"spellcheck") + 
"?term=foo"));
-        IndexPlanner planner = new IndexPlanner(indexNode, "/foo", filter, 
Collections.<OrderEntry>emptyList());
-
-        return planner.getPlan();
-    }
-    //------ END - Suggestion/spellcheck plan tests
-
     private IndexNode createIndexNode(IndexDefinition defn, long numOfDocs) 
throws IOException {
         return new IndexNode("foo", defn, createSampleDirectory(numOfDocs), 
null);
     }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java?rev=1723300&r1=1723299&r2=1723300&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
 Wed Jan  6 12:27:18 2016
@@ -201,7 +201,7 @@ public class LuceneIndexSuggestionTest {
         final String indexPropName = "description";
         final String indexPropValue = "this is just a sample text which should 
get some response in suggestions";
         final String suggestQueryText = "th";
-        final boolean shouldSuggest = false;
+        final boolean shouldSuggest = true;
 
         checkSuggestions(indexNodeType, queryNodeType,
                 indexPropName, indexPropValue,


Reply via email to