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 ch...@apache.org on 2016/02/04 12:33:09 UTC
svn commit: r1728443 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: chetanm
Date: Thu Feb 4 11:33:08 2016
New Revision: 1728443
URL: http://svn.apache.org/viewvc?rev=1728443&view=rev
Log:
OAK-3981 - Change in aggregation flow in OAK-3831 causes some properties to be left out of aggregation
Introduced a new property config `excludeFromAggregation` to enable excluding certain properties from aggregation. Otherwise a property would always get aggregated if its type is in includedPropertyTypes
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java?rev=1728443&r1=1728442&r2=1728443&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java Thu Feb 4 11:33:08 2016
@@ -319,4 +319,9 @@ public interface LuceneIndexConstants {
* for this property
*/
String PROP_FACETS = "facets";
+
+ /**
+ * Boolean property indicate that property should not be included in aggregation
+ */
+ String PROP_EXCLUDE_FROM_AGGREGATE = "excludeFromAggregation";
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1728443&r1=1728442&r2=1728443&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java Thu Feb 4 11:33:08 2016
@@ -831,9 +831,12 @@ public class LuceneIndexEditor implement
}
//Check if any explicit property defn is defined via relative path
- // and is marked to exclude this property from being indexed
+ // and is marked to exclude this property from being indexed. We exclude
+ //it from aggregation if
+ // 1. Its not to be indexed i.e. index=false
+ // 2. Its explicitly excluded from aggregation i.e. excludeFromAggregation=true
PropertyDefinition pdForRootNode = indexingRule.getConfig(propertyPath);
- if (pdForRootNode != null && !pdForRootNode.nodeScopeIndex) {
+ if (pdForRootNode != null && (!pdForRootNode.index || pdForRootNode.excludeFromAggregate)) {
continue;
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java?rev=1728443&r1=1728442&r2=1728443&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java Thu Feb 4 11:33:08 2016
@@ -90,6 +90,8 @@ class PropertyDefinition {
final String[] ancestors;
+ final boolean excludeFromAggregate;
+
/**
* Property name excluding the relativePath. For regular expression based definition
* its set to null
@@ -128,6 +130,7 @@ class PropertyDefinition {
this.useInSpellcheck = getOptionalValueIfIndexed(defn, LuceneIndexConstants.PROP_USE_IN_SPELLCHECK, false);
this.nullCheckEnabled = getOptionalValueIfIndexed(defn, LuceneIndexConstants.PROP_NULL_CHECK_ENABLED, false);
this.notNullCheckEnabled = getOptionalValueIfIndexed(defn, LuceneIndexConstants.PROP_NOT_NULL_CHECK_ENABLED, false);
+ this.excludeFromAggregate = getOptionalValueIfIndexed(defn, LuceneIndexConstants.PROP_EXCLUDE_FROM_AGGREGATE, false);
this.nonRelativeName = determineNonRelativeName();
this.ancestors = computeAncestors(name);
this.facet = getOptionalValueIfIndexed(defn, LuceneIndexConstants.PROP_FACETS, false);
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java?rev=1728443&r1=1728442&r2=1728443&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java Thu Feb 4 11:33:08 2016
@@ -1745,7 +1745,7 @@ public class LucenePropertyIndexTest ext
Tree prop1 = props.addChild(TestUtil.unique("prop"));
prop1.setProperty(LuceneIndexConstants.PROP_NAME, "original/jcr:content/type");
- prop1.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, false);
+ prop1.setProperty(LuceneIndexConstants.PROP_EXCLUDE_FROM_AGGREGATE, true);
prop1.setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
newNodeAggregator(idx)
@@ -1769,6 +1769,43 @@ public class LucenePropertyIndexTest ext
//Check that property index is being used
assertThat(explain("select [jcr:path] from [oak:TestNode] where [original/jcr:content/type] = 'foo'"),
+ containsString("original/jcr:content/type:foo"));
+ }
+
+ @Test
+ public void aggregateAndIncludeRelativePropertyByDefault() throws Exception{
+ NodeTypeRegistry.register(root, IOUtils.toInputStream(TestUtil.TEST_NODE_TYPE), "test nodeType");
+ Tree idx = createIndex("test1", of("propa", "propb"));
+ Tree props = TestUtil.newRulePropTree(idx, TestUtil.NT_TEST);
+ Tree prop = props.addChild(TestUtil.unique("prop"));
+ prop.setProperty(LuceneIndexConstants.PROP_NAME, "jcr:title");
+ prop.setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
+
+ Tree prop1 = props.addChild(TestUtil.unique("prop"));
+ prop1.setProperty(LuceneIndexConstants.PROP_NAME, "original/jcr:content/type");
+ prop1.setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true);
+
+ newNodeAggregator(idx)
+ .newRuleWithName(NT_FILE, newArrayList(JCR_CONTENT, JCR_CONTENT + "/*"))
+ .newRuleWithName(TestUtil.NT_TEST, newArrayList("/*"));
+ root.commit();
+
+ Tree test = root.getTree("/").addChild("test");
+ Tree a = createNodeWithType(test, "a", TestUtil.NT_TEST);
+ Tree af = createFileNode(a, "original", "hello", "text/plain");
+ af.setProperty("type", "jpg");
+ af.setProperty("class", "image"); //Should be included
+
+ root.commit();
+
+ // hello and image would be index by aggregation but
+ // jpg should also be included as it has not been excluded
+ assertQuery("select [jcr:path] from [oak:TestNode] where contains(*, 'hello')", asList("/test/a"));
+ assertQuery("select [jcr:path] from [oak:TestNode] where contains(*, 'image')", asList("/test/a"));
+ assertQuery("select [jcr:path] from [oak:TestNode] where contains(*, 'jpg')", asList("/test/a"));
+
+ //Check that property index is being used
+ assertThat(explain("select [jcr:path] from [oak:TestNode] where [original/jcr:content/type] = 'foo'"),
containsString("original/jcr:content/type:foo"));
}