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;