Author: chetanm
Date: Mon Oct 13 10:24:22 2014
New Revision: 1631333

URL: http://svn.apache.org/r1631333
Log:
OAK-2005 - Use separate Lucene index for performing property related queries

- Use IndexDefinition in LuceneIndexEditorContent to remove logic duplication

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/LuceneIndexEditorContext.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=1631333&r1=1631332&r2=1631333&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
 Mon Oct 13 10:24:22 2014
@@ -33,6 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXCLUDE_PROPERTY_NAMES;
+import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXPERIMENTAL_STORAGE;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.FULL_TEXT_ENABLED;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INCLUDE_PROPERTY_NAMES;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INCLUDE_PROPERTY_TYPES;
@@ -47,6 +48,8 @@ public class IndexDefinition {
 
     private final boolean fullTextEnabled;
 
+    private final boolean storageEnabled;
+
     private final NodeBuilder definition;
 
     public IndexDefinition(NodeBuilder defn) {
@@ -69,6 +72,8 @@ public class IndexDefinition {
         this.excludes = toLowerCase(getMultiProperty(defn, 
EXCLUDE_PROPERTY_NAMES));
         this.includes = getMultiProperty(defn, INCLUDE_PROPERTY_NAMES);
         this.fullTextEnabled = getOptionalValue(defn, FULL_TEXT_ENABLED, true);
+        //Storage is disabled for non full text indexes
+        this.storageEnabled = this.fullTextEnabled && getOptionalValue(defn, 
EXPERIMENTAL_STORAGE, true);
     }
 
     boolean includeProperty(String name) {
@@ -93,6 +98,17 @@ public class IndexDefinition {
         return fullTextEnabled;
     }
 
+    public int getPropertyTypes() {
+        return propertyTypes;
+    }
+
+    /**
+     * Checks if a given property should be stored in the lucene index or not
+     */
+    public boolean isStored(String name) {
+        return storageEnabled;
+    }
+
     //~------------------------------------------< Internal >
 
     private static boolean getOptionalValue(NodeBuilder definition, String 
propName, boolean defaultVal){

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1631333&r1=1631332&r2=1631333&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 Mon Oct 13 10:24:22 2014
@@ -16,9 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.lucene;
 
-import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXCLUDE_PROPERTY_NAMES;
-import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXPERIMENTAL_STORAGE;
-import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INCLUDE_PROPERTY_TYPES;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.PERSISTENCE_PATH;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION;
@@ -27,12 +24,8 @@ import static org.apache.lucene.store.No
 import java.io.File;
 import java.io.IOException;
 import java.util.Calendar;
-import java.util.Set;
-
-import javax.jcr.PropertyType;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -48,8 +41,6 @@ import org.apache.tika.parser.Parser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableSet;
-
 public class LuceneIndexEditorContext {
 
     private static final Logger log = LoggerFactory
@@ -98,56 +89,30 @@ public class LuceneIndexEditorContext {
 
     private static final Parser parser = new AutoDetectParser();
 
-    private final NodeBuilder definition;
-
-    private IndexWriter writer = null;
+    private final IndexDefinition definition;
 
-    private final int propertyTypes;
+    private final NodeBuilder definitionBuilder;
 
-    private final Set<String> excludes;
+    private IndexWriter writer = null;
 
     private long indexedNodes;
 
-    private boolean storageEnabled = true;
-
     private final IndexUpdateCallback updateCallback;
 
     LuceneIndexEditorContext(NodeBuilder definition, Analyzer analyzer, 
IndexUpdateCallback updateCallback) {
-        this.definition = definition;
+        this.definitionBuilder = definition;
+        this.definition = new IndexDefinition(definitionBuilder);
         this.config = getIndexWriterConfig(analyzer);
-
-        PropertyState pst = definition.getProperty(INCLUDE_PROPERTY_TYPES);
-        if (pst != null) {
-            int types = 0;
-            for (String inc : pst.getValue(Type.STRINGS)) {
-                try {
-                    types |= 1 << PropertyType.valueFromName(inc);
-                } catch (IllegalArgumentException e) {
-                    log.warn("Unknown property type: " + inc);
-                }
-            }
-            this.propertyTypes = types;
-        } else {
-            this.propertyTypes = -1;
-        }
-        PropertyState pse = definition.getProperty(EXCLUDE_PROPERTY_NAMES);
-        if (pse != null) {
-            excludes = ImmutableSet.copyOf(pse.getValue(Type.STRINGS));
-        } else {
-            excludes = ImmutableSet.of();
-        }
-        PropertyState storage = definition.getProperty(EXPERIMENTAL_STORAGE);
-        storageEnabled = storage == null || storage.getValue(Type.BOOLEAN);
         this.indexedNodes = 0;
         this.updateCallback = updateCallback;
     }
 
     int getPropertyTypes() {
-        return propertyTypes;
+        return definition.getPropertyTypes();
     }
 
     boolean includeProperty(String name) {
-        return !excludes.contains(name);
+        return definition.includeProperty(name);
     }
 
     Parser getParser() {
@@ -156,7 +121,7 @@ public class LuceneIndexEditorContext {
 
     IndexWriter getWriter() throws IOException {
         if (writer == null) {
-            writer = new IndexWriter(newIndexDirectory(definition), config);
+            writer = new IndexWriter(newIndexDirectory(definitionBuilder), 
config);
         }
         return writer;
     }
@@ -171,7 +136,7 @@ public class LuceneIndexEditorContext {
             //OAK-2029 Record the last updated status so
             //as to make IndexTracker detect changes when index
             //is stored in file system
-            NodeBuilder status = definition.child(":status");
+            NodeBuilder status = definitionBuilder.child(":status");
             status.setProperty("lastUpdated", 
ISO8601.format(Calendar.getInstance()), Type.DATE);
             status.setProperty("indexedNodes",indexedNodes);
         }
@@ -192,10 +157,9 @@ public class LuceneIndexEditorContext {
 
     /**
      * Checks if a given property should be stored in the lucene index or not
-     * 
      */
     public boolean isStored(String name) {
-        return storageEnabled;
+        return definition.isStored(name);
     }
 
 }


Reply via email to