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 al...@apache.org on 2014/10/30 19:59:17 UTC
svn commit: r1635586 - 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: alexparvulescu
Date: Thu Oct 30 18:59:16 2014
New Revision: 1635586
URL: http://svn.apache.org/r1635586
Log:
OAK-2240 - Support for indexing relative properties
- added max level traversal for deleted content based on the relative properties defined
Modified:
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/LuceneIndexEditor.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
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=1635586&r1=1635585&r2=1635586&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 Thu Oct 30 18:59:16 2014
@@ -94,6 +94,8 @@ class IndexDefinition {
private final Set<String> relativePropNames;
+ private final int relativePropsMaxLevels;
+
/**
* Defines the maximum estimated entry count configured.
* Defaults to {#DEFAULT_ENTRY_COUNT}
@@ -131,6 +133,7 @@ class IndexDefinition {
this.relativeProps = collectRelativeProps(Iterables.concat(includes, orderedProps));
this.propDefns = collectPropertyDefns(defn);
this.relativePropNames = collectRelPropertyNames(this.relativeProps.values());
+ this.relativePropsMaxLevels = getRelPropertyMaxLevels(this.relativeProps.values());
String functionName = getOptionalValue(defn, LuceneIndexConstants.FUNC_NAME, null);
this.funcName = functionName != null ? "native*" + functionName : null;
@@ -299,12 +302,24 @@ class IndexDefinition {
private Set<String> collectRelPropertyNames(Collection<RelativeProperty> props) {
Set<String> propNames = newHashSet();
- for (RelativeProperty prop : props){
+ for (RelativeProperty prop : props) {
propNames.add(prop.name);
}
return ImmutableSet.copyOf(propNames);
}
+ private int getRelPropertyMaxLevels(Collection<RelativeProperty> props) {
+ int max = -1;
+ for (RelativeProperty prop : props) {
+ max = Math.max(max, prop.ancestors.length);
+ }
+ return max;
+ }
+
+ public int getRelPropertyMaxLevels() {
+ return relativePropsMaxLevels;
+ }
+
private Codec createCodec() {
String codecName = getOptionalValue(definition, LuceneIndexConstants.CODEC_NAME, null);
Codec codec = null;
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=1635586&r1=1635585&r2=1635586&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 Oct 30 18:59:16 2014
@@ -98,6 +98,8 @@ public class LuceneIndexEditor implement
*/
private final boolean isDeleted;
+ private final int deletedMaxLevels;
+
LuceneIndexEditor(NodeState root, NodeBuilder definition, Analyzer analyzer,
IndexUpdateCallback updateCallback) throws CommitFailedException {
this.parent = null;
@@ -112,9 +114,11 @@ public class LuceneIndexEditor implement
typePredicate = Predicates.alwaysTrue();
}
this.isDeleted = false;
+ this.deletedMaxLevels = -1;
}
- private LuceneIndexEditor(LuceneIndexEditor parent, String name, boolean isDeleted) {
+ private LuceneIndexEditor(LuceneIndexEditor parent, String name,
+ boolean isDeleted, int deletedMaxLevels) {
this.parent = parent;
this.name = name;
this.path = null;
@@ -122,6 +126,7 @@ public class LuceneIndexEditor implement
this.root = parent.root;
this.typePredicate = parent.typePredicate;
this.isDeleted = isDeleted;
+ this.deletedMaxLevels = deletedMaxLevels;
}
public String getPath() {
@@ -189,13 +194,13 @@ public class LuceneIndexEditor implement
@Override
public Editor childNodeAdded(String name, NodeState after) {
- return new LuceneIndexEditor(this, name, false);
+ return new LuceneIndexEditor(this, name, false, -1);
}
@Override
public Editor childNodeChanged(
String name, NodeState before, NodeState after) {
- return new LuceneIndexEditor(this, name, false);
+ return new LuceneIndexEditor(this, name, false, -1);
}
@Override
@@ -219,8 +224,17 @@ public class LuceneIndexEditor implement
}
if (context.getDefinition().hasRelativeProperties()) {
- // need to possibly update aggregated properties
- return new LuceneIndexEditor(this, name, true);
+ int maxLevelsDown;
+ if (isDeleted) {
+ maxLevelsDown = deletedMaxLevels - 1;
+ } else {
+ maxLevelsDown = context.getDefinition()
+ .getRelPropertyMaxLevels();
+ }
+ if (maxLevelsDown > 0) {
+ // need to update aggregated properties on deletes
+ return new LuceneIndexEditor(this, name, true, maxLevelsDown);
+ }
}
return null; // no need to recurse down the removed subtree
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java?rev=1635586&r1=1635585&r2=1635586&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java Thu Oct 30 18:59:16 2014
@@ -193,12 +193,15 @@ public class LuceneIndexEditorTest {
releaseIndexNode();
before = indexed;
builder = before.builder();
- builder.child("test").child("jcr:content").child("metadata").remove();
+ builder.child("test").child("jcr:content").remove();
after = builder.getNodeState();
indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
tracker.update(indexed);
- assertNull("relative removes must be persisted too",
- getPath(new TermQuery(new Term("jcr:content/metadata/type", "image"))));
+ assertNull("removes must be persisted too, 1st level",
+ getPath(new TermQuery(new Term("jcr:content/mime", "pdf"))));
+ assertNull("removes must be persisted too, 2nd level",
+ getPath(new TermQuery(new Term("jcr:content/metadata/type",
+ "image"))));
}
//@Test