You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2012/02/07 11:40:59 UTC

svn commit: r1241418 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java

Author: jukka
Date: Tue Feb  7 10:40:58 2012
New Revision: 1241418

URL: http://svn.apache.org/viewvc?rev=1241418&view=rev
Log:
JCR-3213: Speed up NodeIndexer.isIndexed() check

Simplify code by moving the isIndexed() check up the call chain.

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java?rev=1241418&r1=1241417&r2=1241418&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java Tue Feb  7 10:40:58 2012
@@ -244,29 +244,32 @@ public class NodeIndexer {
 
         Set<Name> props = node.getPropertyNames();
         for (Name propName : props) {
-            PropertyId id = new PropertyId(node.getNodeId(), propName);
-            try {
-                PropertyState propState = (PropertyState) stateProvider.getItemState(id);
-
-                // add each property to the _PROPERTIES_SET for searching
-                // beginning with V2
-                if (indexFormatVersion.getVersion() >= IndexFormatVersion.V2.getVersion()) {
-                    addPropertyName(doc, propState.getName());
-                }
+            if (isIndexed(propName)) {
+                PropertyId id = new PropertyId(node.getNodeId(), propName);
+                try {
+                    PropertyState propState =
+                            (PropertyState) stateProvider.getItemState(id);
+
+                    // add each property to the _PROPERTIES_SET for searching
+                    // beginning with V2
+                    if (indexFormatVersion.getVersion() >= IndexFormatVersion.V2.getVersion()) {
+                        addPropertyName(doc, propState.getName());
+                    }
 
-                InternalValue[] values = propState.getValues();
-                boolean isIndexed = isIndexed(propState.getName());
-                for (InternalValue value : values) {
-                    addValue(doc, value, propState.getName(), isIndexed);
-                }
-                if (values.length > 1) {
-                    // real multi-valued
-                    addMVPName(doc, propState.getName());
+                    InternalValue[] values = propState.getValues();
+                    for (InternalValue value : values) {
+                        addValue(doc, value, propState.getName());
+                    }
+
+                    if (values.length > 1) {
+                        // real multi-valued
+                        addMVPName(doc, propState.getName());
+                    }
+                } catch (NoSuchItemStateException e) {
+                    throwRepositoryException(e);
+                } catch (ItemStateException e) {
+                    throwRepositoryException(e);
                 }
-            } catch (NoSuchItemStateException e) {
-                throwRepositoryException(e);
-            } catch (ItemStateException e) {
-                throwRepositoryException(e);
             }
         }
 
@@ -313,9 +316,8 @@ public class NodeIndexer {
      * @param doc   the document.
      * @param value the internal jackrabbit value.
      * @param name  the name of the property.
-     * @param isIndexed  if the property should be added to the index
      */
-    protected void addValue(Document doc, InternalValue value, Name name, boolean isIndexed) throws RepositoryException {
+    protected void addValue(Document doc, InternalValue value, Name name) throws RepositoryException {
         String fieldName = name.getLocalName();
         try {
             fieldName = resolver.getJCRName(name);
@@ -324,81 +326,53 @@ public class NodeIndexer {
         }
         switch (value.getType()) {
             case PropertyType.BINARY:
-                if (isIndexed) {
-                    addBinaryValue(doc, fieldName, value);
-                }
+                addBinaryValue(doc, fieldName, value);
                 break;
             case PropertyType.BOOLEAN:
-                if (isIndexed) {
-                    addBooleanValue(doc, fieldName, value.getBoolean());
-                }
+                addBooleanValue(doc, fieldName, value.getBoolean());
                 break;
             case PropertyType.DATE:
-                if (isIndexed) {
-                    addCalendarValue(doc, fieldName, value.getDate());
-                }
+                addCalendarValue(doc, fieldName, value.getDate());
                 break;
             case PropertyType.DOUBLE:
-                if (isIndexed) {
-                    addDoubleValue(doc, fieldName, value.getDouble());
-                }
+                addDoubleValue(doc, fieldName, value.getDouble());
                 break;
             case PropertyType.LONG:
-                if (isIndexed) {
-                    addLongValue(doc, fieldName, value.getLong());
-                }
+                addLongValue(doc, fieldName, value.getLong());
                 break;
             case PropertyType.REFERENCE:
-                if (isIndexed) {
-                    addReferenceValue(doc, fieldName, value.getNodeId(), false);
-                }
+                addReferenceValue(doc, fieldName, value.getNodeId(), false);
                 break;
             case PropertyType.WEAKREFERENCE:
-                if (isIndexed) {
-                    addReferenceValue(doc, fieldName, value.getNodeId(), true);
-                }
+                addReferenceValue(doc, fieldName, value.getNodeId(), true);
                 break;
             case PropertyType.PATH:
-                if (isIndexed) {
-                    addPathValue(doc, fieldName, value.getPath());
-                }
+                addPathValue(doc, fieldName, value.getPath());
                 break;
             case PropertyType.URI:
-                if (isIndexed) {
-                    addURIValue(doc, fieldName, value.getURI());
-                }
+                addURIValue(doc, fieldName, value.getURI());
                 break;
             case PropertyType.STRING:
-                if (isIndexed) {
-                    // never fulltext index jcr:uuid String
-                    if (name.equals(NameConstants.JCR_UUID)) {
-                        addStringValue(doc, fieldName, value.getString(),
-                                false, false, DEFAULT_BOOST, true);
-                    } else {
-                        addStringValue(doc, fieldName, value.getString(),
-                                true, isIncludedInNodeIndex(name),
-                                getPropertyBoost(name), useInExcerpt(name));
-                    }
+                // never fulltext index jcr:uuid String
+                if (name.equals(NameConstants.JCR_UUID)) {
+                    addStringValue(doc, fieldName, value.getString(),
+                            false, false, DEFAULT_BOOST, true);
+                } else {
+                    addStringValue(doc, fieldName, value.getString(),
+                            true, isIncludedInNodeIndex(name),
+                            getPropertyBoost(name), useInExcerpt(name));
                 }
                 break;
             case PropertyType.NAME:
-                // jcr:primaryType and jcr:mixinTypes are required for correct
-                // node type resolution in queries
-                if (name.equals(NameConstants.JCR_PRIMARYTYPE)
-                        || name.equals(NameConstants.JCR_MIXINTYPES)
-                        || isIndexed) {
-                    addNameValue(doc, fieldName, value.getName());
-                }
+                addNameValue(doc, fieldName, value.getName());
                 break;
             case PropertyType.DECIMAL:
-                if (isIndexed) {
-                    addDecimalValue(doc, fieldName, value.getDecimal());
-                }
+                addDecimalValue(doc, fieldName, value.getDecimal());
                 break;
             default:
                 throw new IllegalArgumentException("illegal internal value type: " + value.getType());
         }
-        addValueProperty(doc, value, name, fieldName, isIndexed);
+        addValueProperty(doc, value, name, fieldName);
     }
 
     /**
@@ -412,17 +386,9 @@ public class NodeIndexer {
      *            the internal jackrabbit value.
      * @param name
      *            the name of the property.
-     * @param isIndexed  
-     *            if the property should added to the index
      */
     protected void addValueProperty(Document doc, InternalValue value,
-            Name name, String fieldName, boolean isIndexed) throws RepositoryException {
-
-        // skip this method if field is not indexed
-        if (!isIndexed) {
-            return;
-        }
-
+            Name name, String fieldName) throws RepositoryException {
         // add length
         if (indexFormatVersion.getVersion() >= IndexFormatVersion.V3.getVersion()) {
             addLength(doc, fieldName, value);
@@ -859,19 +825,21 @@ public class NodeIndexer {
     }
 
     /**
-     * Returns <code>true</code> if the property with the given name should be
-     * indexed.
+     * Returns <code>true</code> if the property with the given name should
+     * be indexed. The default is to index all properties unless explicit
+     * indexing configuration is specified. The <code>jcr:primaryType</code>
+     * and <code>jcr:mixinTypes</code> properties are always indexed for
+     * correct node type resolution in queries.
      *
      * @param propertyName name of a property.
-     * @return <code>true</code> if the property should be fulltext indexed;
+     * @return <code>true</code> if the property should be indexed;
      *         <code>false</code> otherwise.
      */
     protected boolean isIndexed(Name propertyName) {
-        if (indexingConfig == null) {
-            return true;
-        } else {
-            return indexingConfig.isIndexed(node, propertyName);
-        }
+        return indexingConfig == null
+                || propertyName.equals(NameConstants.JCR_PRIMARYTYPE)
+                || propertyName.equals(NameConstants.JCR_MIXINTYPES)
+                || indexingConfig.isIndexed(node, propertyName);
     }
 
     /**