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);
}
}