[exo-jcr-commits] exo-jcr SVN: r4823 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Sep 1 03:12:32 EDT 2011


Author: sergiykarpenko
Date: 2011-09-01 03:12:32 -0400 (Thu, 01 Sep 2011)
New Revision: 4823

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ChildAxisQuery.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldNames.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldSelectors.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexFormatVersion.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIndexer.java
Log:
EXOJCR-1239: patch from JCR-1571 committed (node index stored in lucene index)

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ChildAxisQuery.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ChildAxisQuery.java	2011-09-01 06:42:18 UTC (rev 4822)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ChildAxisQuery.java	2011-09-01 07:12:32 UTC (rev 4823)
@@ -538,15 +538,14 @@
       {
          if (position != LocationStepQueryNode.NONE)
          {
-            Document node = reader.document(i, FieldSelectors.UUID_AND_PARENT);
+            Document node = reader.document(i, FieldSelectors.UUID_AND_PARENT_AND_INDEX);
             String parentId = node.get(FieldNames.PARENT);
             String id = node.get(FieldNames.UUID);
             try
             {
-               //NodeState state = (NodeState) itemMgr.getItemState(parentId);
-               NodeData state = (NodeData)itemMgr.getItemData(parentId);
                if (nameTest == null)
                {
+                  NodeData state = (NodeData)itemMgr.getItemData(parentId);
                   // only select this node if it is the child at
                   // specified position
                   if (position == LocationStepQueryNode.LAST)
@@ -574,6 +573,7 @@
                   // specified position
                   if (position == LocationStepQueryNode.LAST)
                   {
+                     NodeData state = (NodeData)itemMgr.getItemData(parentId);
                      // only select last
 
                      if (state == null)
@@ -591,6 +591,11 @@
                         }
                      }
                   }
+                  else if (version.getVersion() >= IndexFormatVersion.V4.getVersion())
+                  {
+                     if (Integer.valueOf(node.get(FieldNames.INDEX)) != position)
+                        return false;
+                  }
                   else
                   {
                      NodeData nodeData = (NodeData)itemMgr.getItemData(id);

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldNames.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldNames.java	2011-09-01 06:42:18 UTC (rev 4822)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldNames.java	2011-09-01 07:12:32 UTC (rev 4823)
@@ -64,6 +64,11 @@
     public static final String LOCAL_NAME = "_:LOCAL_NAME".intern();
 
     /**
+     * Name of the field that contains the index of the item.
+     */
+    public static final String INDEX = "_:INDEX".intern();
+
+    /**
      * Name of the field that contains the namespace URI of the node name. Terms
      * are not tokenized.
      */

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldSelectors.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldSelectors.java	2011-09-01 06:42:18 UTC (rev 4822)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FieldSelectors.java	2011-09-01 07:12:32 UTC (rev 4823)
@@ -63,4 +63,25 @@
             }
         }
     };
+
+    public static final FieldSelector UUID_AND_PARENT_AND_INDEX = new FieldSelector() {
+        /**
+         * Accepts {@link FieldNames#UUID}, {@link FieldNames#PARENT} 
+         * and {@link FieldNames#INDEX}.
+         *
+         * @param fieldName the field name to check.
+         * @return result.
+         */
+        public FieldSelectorResult accept(String fieldName) {
+            if (FieldNames.UUID == fieldName) {
+                return FieldSelectorResult.LOAD;
+            } else if (FieldNames.PARENT == fieldName) {
+                return FieldSelectorResult.LOAD;
+            } else if (FieldNames.INDEX == fieldName) {
+               return FieldSelectorResult.LOAD;
+            } else {
+                return FieldSelectorResult.NO_LOAD;
+            }
+        }
+    };
 }

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexFormatVersion.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexFormatVersion.java	2011-09-01 06:42:18 UTC (rev 4822)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexFormatVersion.java	2011-09-01 07:12:32 UTC (rev 4823)
@@ -16,10 +16,10 @@
  */
 package org.exoplatform.services.jcr.impl.core.query.lucene;
 
+import org.apache.lucene.index.IndexReader;
+
 import java.util.Collection;
 
-import org.apache.lucene.index.IndexReader;
-
 /**
  * This class indicates the lucene index format that is used.
  * <ul>
@@ -52,11 +52,16 @@
     public static final IndexFormatVersion V2 = new IndexFormatVersion(2);
 
     /**
-     * V3 is the index format for Jackrabbit releases >= 1.5
+     * V3 is the index format for Jackrabbit releases 1.5.x
      */
     public static final IndexFormatVersion V3 = new IndexFormatVersion(3);
 
     /**
+     * V4 is the index format for Jackrabbit releases >= 1.6
+     */
+    public static final IndexFormatVersion V4 = new IndexFormatVersion(4);
+
+    /**
      * The used version of the index format
      */
     private final int version;
@@ -104,7 +109,9 @@
     public static IndexFormatVersion getVersion(IndexReader indexReader) {
         Collection fields = indexReader.getFieldNames(
                 IndexReader.FieldOption.ALL);
-        if (fields.contains(FieldNames.LOCAL_NAME) || indexReader.numDocs() == 0) {
+        if (fields.contains(FieldNames.INDEX) || indexReader.numDocs() == 0) {
+           return IndexFormatVersion.V4;
+        } else if (fields.contains(FieldNames.LOCAL_NAME)) {
             return IndexFormatVersion.V3;
         } else if (fields.contains(FieldNames.PROPERTIES_SET)) {
             return IndexFormatVersion.V2;

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIndexer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIndexer.java	2011-09-01 06:42:18 UTC (rev 4822)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIndexer.java	2011-09-01 07:12:32 UTC (rev 4823)
@@ -217,6 +217,12 @@
          // unknown uri<->prefix mappings
       }
 
+      if (indexFormatVersion.getVersion() >= IndexFormatVersion.V4.getVersion())
+      {
+         doc.add(new Field(FieldNames.INDEX, Integer.toString(node.getQPath().getIndex()), Field.Store.YES,
+            Field.Index.NOT_ANALYZED_NO_NORMS));
+      }
+
       Collection<PropertyData> props = node.getChildPropertiesData();
       if (props == null)
       {
@@ -334,7 +340,7 @@
                   if (encProp == null)
                   {
                      encProp =
-                     (PropertyData)stateProvider.getItemData(node, new QPathEntry(Constants.JCR_ENCODING, 0),
+                        (PropertyData)stateProvider.getItemData(node, new QPathEntry(Constants.JCR_ENCODING, 0),
                            ItemType.PROPERTY);
                   }
 



More information about the exo-jcr-commits mailing list