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 am...@apache.org on 2014/10/16 14:34:20 UTC
svn commit: r1632287 - in
/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak:
benchmark/util/OakIndexUtils.java
scalability/ScalabilityNodeRelationshipSuite.java
scalability/ScalabilityNodeSuite.java
Author: amitj
Date: Thu Oct 16 12:34:19 2014
New Revision: 1632287
URL: http://svn.apache.org/r1632287
Log:
OAK-2206 - Support lucene property indexes
Added multiple configuration options for supporting lucene property index.
LUCENE
LUCENE_FILE_DOC
LUCENE_FILE
LUCENE_DOC
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeRelationshipSuite.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeSuite.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java?rev=1632287&r1=1632286&r2=1632287&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java Thu Oct 16 12:34:19 2014
@@ -16,9 +16,12 @@
*/
package org.apache.jackrabbit.oak.benchmark.util;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
import org.apache.jackrabbit.oak.plugins.index.property.OrderedIndex;
import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
@@ -32,6 +35,8 @@ import javax.jcr.Session;
import javax.jcr.Value;
import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
/**
* A simple utility class for Oak indexes.
@@ -273,4 +278,77 @@ public class OakIndexUtils {
return indexDef;
}
+
+ /**
+ * Helper method to create or update a lucene property index definition.
+ *
+ * @param session the session
+ * @param indexDefinitionName the name of the node for the index definition
+ * @param propertyNames the list of properties to index
+ * @param type the types of the properties in order of the properties
+ * @param orderedPropsMap the ordered props and its properties
+ * @param persistencePath the path if the persistence=file (default is repository)
+ * @return the node just created
+ * @throws RepositoryException the repository exception
+ */
+ public static Node luceneIndexDefinition(Session session, String indexDefinitionName,
+ String async, String[] propertyNames, String[] type,
+ Map<String, Map<String, String>> orderedPropsMap, String persistencePath)
+ throws RepositoryException {
+
+ Node root = session.getRootNode();
+ Node indexDefRoot = JcrUtils.getOrAddNode(root, IndexConstants.INDEX_DEFINITIONS_NAME,
+ NodeTypeConstants.NT_UNSTRUCTURED);
+
+ // Raise nodeType index cost - OAK-2200
+ Node nodeTypeIndexDef = JcrUtils.getOrAddNode(indexDefRoot, "nodeType");
+ nodeTypeIndexDef.setProperty(IndexConstants.ENTRY_COUNT_PROPERTY_NAME, Long.MAX_VALUE);
+
+ Node indexDef = JcrUtils.getOrAddNode(indexDefRoot, indexDefinitionName,
+ IndexConstants.INDEX_DEFINITIONS_NODE_TYPE);
+
+ indexDef.setProperty(IndexConstants.TYPE_PROPERTY_NAME, LuceneIndexConstants.TYPE_LUCENE);
+ indexDef.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
+ if (async != null) {
+ indexDef.setProperty(IndexConstants.ASYNC_PROPERTY_NAME, async);
+ }
+ // Set indexed property names
+ indexDef.setProperty(LuceneIndexConstants.INCLUDE_PROPERTY_NAMES, propertyNames,
+ PropertyType.NAME);
+ for (int i = 0; i < propertyNames.length; i++) {
+ Node propNode =
+ JcrUtils.getOrAddNode(indexDef, propertyNames[i], NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ propNode.setProperty(LuceneIndexConstants.PROP_TYPE, type[i]);
+ }
+
+ // Set ordered property names
+ if ((orderedPropsMap != null) && !orderedPropsMap.isEmpty()) {
+ List<String> orderedProps = Lists.newArrayList();
+ for (Map.Entry<String, Map<String, String>> orderedPropEntry : orderedPropsMap
+ .entrySet()) {
+ Node propNode = JcrUtils.getOrAddNode(indexDef, orderedPropEntry.getKey(),
+ NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+ propNode.setProperty(LuceneIndexConstants.PROP_TYPE,
+ orderedPropEntry.getValue().get(LuceneIndexConstants.PROP_TYPE));
+ propNode.setProperty(OrderedIndex.TYPE, true);
+ orderedProps.add(orderedPropEntry.getKey());
+ }
+ if (!orderedProps.isEmpty()) {
+ indexDef.setProperty(LuceneIndexConstants.ORDERED_PROP_NAMES,
+ orderedProps.toArray(new String[orderedProps.size()]),
+ PropertyType.NAME);
+ }
+ }
+
+ // Set file persistence if specified
+ if (!Strings.isNullOrEmpty(persistencePath)) {
+ indexDef.setProperty(LuceneIndexConstants.PERSISTENCE_NAME,
+ LuceneIndexConstants.PERSISTENCE_FILE);
+ indexDef.setProperty(LuceneIndexConstants.PERSISTENCE_PATH,
+ persistencePath);
+ }
+ session.save();
+
+ return indexDef;
+ }
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeRelationshipSuite.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeRelationshipSuite.java?rev=1632287&r1=1632286&r2=1632287&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeRelationshipSuite.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeRelationshipSuite.java Thu Oct 16 12:34:19 2014
@@ -22,6 +22,7 @@ import java.util.*;
import javax.jcr.*;
+import com.google.common.base.StandardSystemProperty;
import com.google.common.collect.*;
import org.apache.commons.math.stat.descriptive.SynchronizedDescriptiveStatistics;
@@ -32,6 +33,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.oak.benchmark.util.OakIndexUtils;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
import org.apache.jackrabbit.oak.plugins.index.property.OrderedIndex;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.scalability.util.NodeTypeUtils;
@@ -134,6 +136,9 @@ public class ScalabilityNodeRelationship
}
protected void createIndexes(Session session) throws RepositoryException {
+ Map<String, Map<String, String>> orderedMap = Maps.newHashMap();
+ String persistencePath = "";
+
// define indexes on properties
switch (INDEX_TYPE) {
case PROPERTY:
@@ -145,8 +150,8 @@ public class ScalabilityNodeRelationship
new String[]{SOURCE_ID},
false, new String[]{CUSTOM_REL_NODE_TYPE});
break;
+ // define ordered indexes on properties
case ORDERED:
- // define ordered indexes on properties
OakIndexUtils.orderedIndexDefinition(session, "customIndexActivity", ASYNC_INDEX,
new String[]{CREATED}, false,
new String[]{CUSTOM_ACT_NODE_TYPE},
@@ -156,7 +161,29 @@ public class ScalabilityNodeRelationship
new String[]{CUSTOM_REL_NODE_TYPE},
OrderedIndex.OrderDirection.DESC.getDirection());
break;
+ // define lucene index on properties
+ case LUCENE_FILE:
+ persistencePath =
+ "target" + StandardSystemProperty.FILE_SEPARATOR.value() + "lucene" + String
+ .valueOf(System.currentTimeMillis());
+ OakIndexUtils.luceneIndexDefinition(session, "customIndexActivity", ASYNC_INDEX,
+ new String[] {SOURCE_ID, CREATED},
+ new String[] {PropertyType.TYPENAME_STRING, PropertyType.TYPENAME_DATE},
+ orderedMap, persistencePath);
+ break;
+ case LUCENE_FILE_DOC:
+ persistencePath =
+ "target" + StandardSystemProperty.FILE_SEPARATOR.value() + "lucene" + String
+ .valueOf(System.currentTimeMillis());
+ case LUCENE_DOC:
+ Map<String, String> propMap = Maps.newHashMap();
+ propMap.put(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
+ orderedMap.put(CREATED, propMap);
case LUCENE:
+ OakIndexUtils.luceneIndexDefinition(session, "customIndexActivity", ASYNC_INDEX,
+ new String[] {SOURCE_ID, CREATED},
+ new String[] {PropertyType.TYPENAME_STRING, PropertyType.TYPENAME_DATE},
+ orderedMap, persistencePath);
break;
}
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeSuite.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeSuite.java?rev=1632287&r1=1632286&r2=1632287&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeSuite.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityNodeSuite.java Thu Oct 16 12:34:19 2014
@@ -23,6 +23,7 @@ import static com.google.common.collect.
import java.util.Calendar;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
@@ -34,8 +35,10 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import com.google.common.base.Splitter;
+import com.google.common.base.StandardSystemProperty;
import com.google.common.base.Stopwatch;
+import com.google.common.collect.Maps;
import org.apache.commons.math.stat.descriptive.SynchronizedDescriptiveStatistics;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.oak.Oak;
@@ -46,6 +49,7 @@ import org.apache.jackrabbit.oak.fixture
import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
import org.apache.jackrabbit.oak.jcr.Jcr;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProvider;
import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneInitializerHelper;
@@ -147,7 +151,7 @@ public class ScalabilityNodeSuite extend
"LongevitySearchAssets" + TEST_ID;
public enum Index {
- PROPERTY, ORDERED, LUCENE
+ PROPERTY, ORDERED, LUCENE, LUCENE_DOC, LUCENE_FILE, LUCENE_FILE_DOC
}
/** Type of index to be created */
@@ -206,6 +210,9 @@ public class ScalabilityNodeSuite extend
}
protected void createIndexes(Session session) throws RepositoryException {
+ Map<String, Map<String, String>> orderedMap = Maps.newHashMap();
+ String persistencePath = "";
+
switch (INDEX_TYPE) {
case ORDERED:
// define ordered indexes on properties
@@ -218,7 +225,29 @@ public class ScalabilityNodeSuite extend
new String[]{CUSTOM_DESC_NODE_TYPE},
OrderedIndex.OrderDirection.DESC.getDirection());
break;
+ // define lucene index on properties
+ case LUCENE_FILE:
+ persistencePath =
+ "target" + StandardSystemProperty.FILE_SEPARATOR.value() + "lucene" + String
+ .valueOf(System.currentTimeMillis());
+ OakIndexUtils.luceneIndexDefinition(session, "customIndex", ASYNC_INDEX,
+ new String[] {FILTER_PROP, DATE_PROP},
+ new String[] {PropertyType.TYPENAME_STRING, PropertyType.TYPENAME_DATE},
+ null, persistencePath);
+ break;
+ case LUCENE_FILE_DOC:
+ persistencePath =
+ "target" + StandardSystemProperty.FILE_SEPARATOR.value() + "lucene" + String
+ .valueOf(System.currentTimeMillis());
+ case LUCENE_DOC:
+ Map<String, String> propMap = Maps.newHashMap();
+ propMap.put(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
+ orderedMap.put(DATE_PROP, propMap);
case LUCENE:
+ OakIndexUtils.luceneIndexDefinition(session, "customIndex", ASYNC_INDEX,
+ new String[] {FILTER_PROP, DATE_PROP},
+ new String[] {PropertyType.TYPENAME_STRING, PropertyType.TYPENAME_DATE},
+ orderedMap, persistencePath);
break;
case PROPERTY:
break;