lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sh...@apache.org
Subject svn commit: r1454862 [39/49] - in /lucene/dev/branches/lucene4258: ./ dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/ dev-tools/idea/lucene/demo/ dev-tools/idea/lucene/facet/ dev-tools/idea/lucene/highlighter/ dev-to...
Date Sun, 10 Mar 2013 15:05:21 GMT
Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/OpenExchangeRatesOrgProvider.java
Sun Mar 10 15:04:57 2013
@@ -33,19 +33,29 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Exchange Rates Provider for {@link CurrencyField} implementing the freely available
- * exchange rates from openexchangerates.org
+ * <p>
+ * Exchange Rates Provider for {@link CurrencyField} capable of fetching &amp; 
+ * parsing the freely available exchange rates from openexchangerates.org
+ * </p>
+ * <p>
+ * Configuration Options:
+ * </p>
+ * <ul>
+ *  <li><code>ratesFileLocation</code> - A file path or absolute URL specifying
the JSON data to load (mandatory)</li>
+ *  <li><code>refreshInterval</code> - How frequently (in minutes) to reload
the exchange rate data (default: 1440)</li>
+ * </ul>
  * <p>
  * <b>Disclaimer:</b> This data is collected from various providers and provided
free of charge
  * for informational purposes only, with no guarantee whatsoever of accuracy, validity,
  * availability or fitness for any purpose; use at your own risk. Other than that - have
  * fun, and please share/watch/fork if you think data like this should be free!
+ * </p>
+ * @see <a href="https://openexchangerates.org/documentation">openexchangerates.org
JSON Data Format</a>
  */
 public class OpenExchangeRatesOrgProvider implements ExchangeRateProvider {
   public static Logger log = LoggerFactory.getLogger(OpenExchangeRatesOrgProvider.class);
   protected static final String PARAM_RATES_FILE_LOCATION   = "ratesFileLocation";
   protected static final String PARAM_REFRESH_INTERVAL      = "refreshInterval";
-  protected static final String DEFAULT_RATES_FILE_LOCATION = "http://openexchangerates.org/latest.json";
   protected static final String DEFAULT_REFRESH_INTERVAL    = "1440";
   
   protected String ratesFileLocation;
@@ -145,7 +155,10 @@ public class OpenExchangeRatesOrgProvide
   @Override
   public void init(Map<String,String> params) throws SolrException {
     try {
-      ratesFileLocation = getParam(params.get(PARAM_RATES_FILE_LOCATION), DEFAULT_RATES_FILE_LOCATION);
+      ratesFileLocation = params.get(PARAM_RATES_FILE_LOCATION);
+      if (null == ratesFileLocation) {
+        throw new SolrException(ErrorCode.SERVER_ERROR, "Init param must be specified: "
+ PARAM_RATES_FILE_LOCATION);
+      }
       refreshInterval = Integer.parseInt(getParam(params.get(PARAM_REFRESH_INTERVAL), DEFAULT_REFRESH_INTERVAL));
       // Force a refresh interval of minimum one hour, since the API does not offer better
resolution
       if (refreshInterval < 60) {
@@ -153,8 +166,11 @@ public class OpenExchangeRatesOrgProvide
         log.warn("Specified refreshInterval was too small. Setting to 60 minutes which is
the update rate of openexchangerates.org");
       }
       log.info("Initialized with rates="+ratesFileLocation+", refreshInterval="+refreshInterval+".");
-    } catch (Exception e) {
-      throw new SolrException(ErrorCode.BAD_REQUEST, "Error initializing", e);
+    } catch (SolrException e1) {
+      throw e1;
+    } catch (Exception e2) {
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Error initializing: " + 
+                              e2.getMessage(), e2);
     } finally {
       // Removing config params custom to us
       params.remove(PARAM_RATES_FILE_LOCATION);

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/PointType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/PointType.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/PointType.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/PointType.java
Sun Mar 10 15:04:57 2013
@@ -69,7 +69,7 @@ public class PointType extends Coordinat
   }
 
   @Override
-  public StorableField[] createFields(SchemaField field, Object value, float boost) {
+  public List<StorableField> createFields(SchemaField field, Object value, float boost)
{
     String externalVal = value.toString();
     String[] point = new String[0];
     try {
@@ -79,12 +79,12 @@ public class PointType extends Coordinat
     }
 
     // TODO: this doesn't currently support polyFields as sub-field types
-    StorableField[] f = new StorableField[ (field.indexed() ? dimension : 0) + (field.stored()
? 1 : 0) ];
+    List<StorableField> f = new ArrayList<StorableField>(dimension+1);
 
     if (field.indexed()) {
       for (int i=0; i<dimension; i++) {
         SchemaField sf = subField(field, i);
-        f[i] = sf.createField(point[i], sf.indexed() && !sf.omitNorms() ? boost :
1f);
+        f.add(sf.createField(point[i], sf.indexed() && !sf.omitNorms() ? boost :
1f));
       }
     }
 
@@ -92,7 +92,7 @@ public class PointType extends Coordinat
       String storedVal = externalVal;  // normalize or not?
       FieldType customType = new FieldType();
       customType.setStored(true);
-      f[f.length - 1] = createField(field.getName(), storedVal, customType, 1f);
+      f.add(createField(field.getName(), storedVal, customType, 1f));
     }
     
     return f;

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SchemaField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SchemaField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SchemaField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SchemaField.java
Sun Mar 10 15:04:57 2013
@@ -18,13 +18,17 @@
 package org.apache.solr.schema;
 
 import org.apache.solr.common.SolrException;
-import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.search.SortField;
+import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.search.QParser;
 
 import org.apache.solr.response.TextResponseWriter;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.io.IOException;
 
@@ -34,11 +38,18 @@ import java.io.IOException;
  *
  */
 public final class SchemaField extends FieldProperties {
+  private static final String FIELD_NAME = "name";
+  private static final String TYPE_NAME = "type";
+  private static final String DEFAULT_VALUE = "default";
+
   final String name;
   final FieldType type;
   final int properties;
   final String defaultValue;
   boolean required = false;  // this can't be final since it may be changed dynamically
+  
+  /** Declared field property overrides */
+  Map<String,String> args = Collections.emptyMap();
 
 
   /** Create a new SchemaField with the given name and type,
@@ -52,13 +63,14 @@ public final class SchemaField extends F
    * of the properties of the prototype except the field name.
    */
   public SchemaField(SchemaField prototype, String name) {
-    this(name, prototype.type, prototype.properties, prototype.defaultValue );
+    this(name, prototype.type, prototype.properties, prototype.defaultValue);
+    args = prototype.args;
   }
 
  /** Create a new SchemaField with the given name and type,
    * and with the specified properties.  Properties are *not*
    * inherited from the type in this case, so users of this
-   * constructor should derive the properties from type.getProperties()
+   * constructor should derive the properties from type.getSolrProperties()
    *  using all the default properties from the type.
    */
   public SchemaField(String name, FieldType type, int properties, String defaultValue ) {
@@ -75,10 +87,11 @@ public final class SchemaField extends F
 
   public String getName() { return name; }
   public FieldType getType() { return type; }
-  int getProperties() { return properties; }
+  public int getProperties() { return properties; }
 
   public boolean indexed() { return (properties & INDEXED)!=0; }
   public boolean stored() { return (properties & STORED)!=0; }
+  public boolean hasDocValues() { return (properties & DOC_VALUES) != 0; }
   public boolean storeTermVector() { return (properties & STORE_TERMVECTORS)!=0; }
   public boolean storeTermPositions() { return (properties & STORE_TERMPOSITIONS)!=0;
}
   public boolean storeTermOffsets() { return (properties & STORE_TERMOFFSETS)!=0; }
@@ -104,8 +117,8 @@ public final class SchemaField extends F
   public StorableField createField(Object val, float boost) {
     return type.createField(this,val,boost);
   }
-  
-  public StorableField[] createFields(Object val, float boost) {
+
+  public List<StorableField> createFields(Object val, float boost) {
     return type.createFields(this,val,boost);
   }
 
@@ -148,9 +161,9 @@ public final class SchemaField extends F
    * @see FieldType#getSortField
    */
   public void checkSortability() throws SolrException {
-    if (! indexed() ) {
+    if (! (indexed() || hasDocValues()) ) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
-                              "can not sort on unindexed field: " 
+                              "can not sort on a field which is neither indexed nor has doc
values: " 
                               + getName());
     }
     if ( multiValued() ) {
@@ -169,9 +182,9 @@ public final class SchemaField extends F
    * @see FieldType#getValueSource
    */
   public void checkFieldCacheSource(QParser parser) throws SolrException {
-    if (! indexed() ) {
+    if (! (indexed() || hasDocValues()) ) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
-                              "can not use FieldCache on unindexed field: " 
+                              "can not use FieldCache on a field which is neither indexed
nor has doc values: " 
                               + getName());
     }
     if ( multiValued() ) {
@@ -185,10 +198,12 @@ public final class SchemaField extends F
   static SchemaField create(String name, FieldType ft, Map<String,String> props) {
 
     String defaultValue = null;
-    if( props.containsKey( "default" ) ) {
-      defaultValue = props.get( "default" );
+    if (props.containsKey(DEFAULT_VALUE)) {
+      defaultValue = props.get(DEFAULT_VALUE);
     }
-    return new SchemaField(name, ft, calcProps(name, ft, props), defaultValue );
+    SchemaField field = new SchemaField(name, ft, calcProps(name, ft, props), defaultValue);
+    field.args = new HashMap<String,String>(props);
+    return field;
   }
 
   /**
@@ -284,10 +299,51 @@ public final class SchemaField extends F
   public boolean equals(Object obj) {
     return(obj instanceof SchemaField) && name.equals(((SchemaField)obj).name);
   }
-}
-
-
-
-
-
 
+  /**
+   * Get a map of property name -> value for this field.  If showDefaults is true,
+   * include default properties (those inherited from the declared property type and
+   * not overridden in the field declaration).
+   */
+  public SimpleOrderedMap<Object> getNamedPropertyValues(boolean showDefaults) {
+    SimpleOrderedMap<Object> properties = new SimpleOrderedMap<Object>();
+    properties.add(FIELD_NAME, getName());
+    properties.add(TYPE_NAME, getType().getTypeName());
+    if (showDefaults) {
+      if (null != getDefaultValue()) {
+        properties.add(DEFAULT_VALUE, getDefaultValue());
+      }
+      properties.add(getPropertyName(INDEXED), indexed());
+      properties.add(getPropertyName(STORED), stored());
+      properties.add(getPropertyName(DOC_VALUES), hasDocValues());
+      properties.add(getPropertyName(STORE_TERMVECTORS), storeTermVector());
+      properties.add(getPropertyName(STORE_TERMPOSITIONS), storeTermPositions());
+      properties.add(getPropertyName(STORE_TERMOFFSETS), storeTermOffsets());
+      properties.add(getPropertyName(OMIT_NORMS), omitNorms());
+      properties.add(getPropertyName(OMIT_TF_POSITIONS), omitTermFreqAndPositions());
+      properties.add(getPropertyName(OMIT_POSITIONS), omitPositions());
+      properties.add(getPropertyName(STORE_OFFSETS), storeOffsetsWithPositions());
+      properties.add(getPropertyName(MULTIVALUED), multiValued());
+      if (sortMissingFirst()) {
+        properties.add(getPropertyName(SORT_MISSING_FIRST), sortMissingFirst());
+      } else if (sortMissingLast()) {
+        properties.add(getPropertyName(SORT_MISSING_LAST), sortMissingLast());
+      }
+      properties.add(getPropertyName(REQUIRED), isRequired());
+      properties.add(getPropertyName(TOKENIZED), isTokenized());
+      // The BINARY property is always false
+      // properties.add(getPropertyName(BINARY), isBinary());
+    } else {
+      for (Map.Entry<String,String> arg : args.entrySet()) {
+        String key = arg.getKey();
+        String value = arg.getValue();
+        if (key.equals(DEFAULT_VALUE)) {
+          properties.add(key, value);
+        } else {
+          properties.add(key, StrUtils.parseBool(value, false));
+        }
+      }
+    }
+    return properties;
+  }
+}

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableDoubleField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableDoubleField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableDoubleField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableDoubleField.java
Sun Mar 10 15:04:57 2013
@@ -132,6 +132,11 @@ class SortableDoubleFieldSource extends 
       }
 
       @Override
+      public boolean exists(int doc) {
+        return termsIndex.getOrd(doc) >= 0;
+      }
+
+      @Override
       public float floatVal(int doc) {
         return (float)doubleVal(doc);
       }
@@ -149,7 +154,12 @@ class SortableDoubleFieldSource extends 
       @Override
       public double doubleVal(int doc) {
         int ord=termsIndex.getOrd(doc);
-        return ord==0 ? def  : NumberUtils.SortableStr2double(termsIndex.lookup(ord, spare));
+        if (ord == -1) {
+          return def;
+        } else {
+          termsIndex.lookupOrd(ord, spare);
+          return NumberUtils.SortableStr2double(spare);
+        }
       }
 
       @Override
@@ -159,8 +169,7 @@ class SortableDoubleFieldSource extends 
 
       @Override
       public Object objectVal(int doc) {
-        int ord=termsIndex.getOrd(doc);
-        return ord==0 ? null  : NumberUtils.SortableStr2double(termsIndex.lookup(ord, spare));
+        return exists(doc) ? doubleVal(doc) : null;
       }
 
       @Override
@@ -181,11 +190,12 @@ class SortableDoubleFieldSource extends 
           @Override
           public void fillValue(int doc) {
             int ord=termsIndex.getOrd(doc);
-            if (ord == 0) {
+            if (ord == -1) {
               mval.value = def;
               mval.exists = false;
             } else {
-              mval.value = NumberUtils.SortableStr2double(termsIndex.lookup(ord, spare));
+              termsIndex.lookupOrd(ord, spare);
+              mval.value = NumberUtils.SortableStr2double(spare);
               mval.exists = true;
             }
           }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableFloatField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableFloatField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableFloatField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableFloatField.java
Sun Mar 10 15:04:57 2013
@@ -136,9 +136,19 @@ class SortableFloatFieldSource extends F
       }
 
       @Override
+      public boolean exists(int doc) {
+        return termsIndex.getOrd(doc) >= 0;
+      }
+
+      @Override
       public float floatVal(int doc) {
         int ord=termsIndex.getOrd(doc);
-        return ord==0 ? def  : NumberUtils.SortableStr2float(termsIndex.lookup(ord, spare));
+        if (ord==-1) {
+          return def;
+        } else {
+          termsIndex.lookupOrd(ord, spare);
+          return NumberUtils.SortableStr2float(spare);
+        }
       }
 
       @Override
@@ -168,8 +178,7 @@ class SortableFloatFieldSource extends F
 
       @Override
       public Object objectVal(int doc) {
-        int ord=termsIndex.getOrd(doc);
-        return ord==0 ? null  : NumberUtils.SortableStr2float(termsIndex.lookup(ord, spare));
+        return exists(doc) ? floatVal(doc) : null;
       }
 
       @Override
@@ -185,11 +194,12 @@ class SortableFloatFieldSource extends F
           @Override
           public void fillValue(int doc) {
             int ord=termsIndex.getOrd(doc);
-            if (ord == 0) {
+            if (ord == -1) {
               mval.value = def;
               mval.exists = false;
             } else {
-              mval.value = NumberUtils.SortableStr2float(termsIndex.lookup(ord, spare));
+              termsIndex.lookupOrd(ord, spare);
+              mval.value = NumberUtils.SortableStr2float(spare);
               mval.exists = true;
             }
           }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableIntField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableIntField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableIntField.java
Sun Mar 10 15:04:57 2013
@@ -143,9 +143,19 @@ class SortableIntFieldSource extends Fie
       }
 
       @Override
+      public boolean exists(int doc) {
+        return termsIndex.getOrd(doc) >= 0;
+      }
+
+      @Override
       public int intVal(int doc) {
         int ord=termsIndex.getOrd(doc);
-        return ord==0 ? def  : NumberUtils.SortableStr2int(termsIndex.lookup(ord, spare),0,3);
+        if (ord==-1) {
+          return def;
+        } else {
+          termsIndex.lookupOrd(ord, spare);
+          return NumberUtils.SortableStr2int(spare,0,3);
+        }
       }
 
       @Override
@@ -170,8 +180,7 @@ class SortableIntFieldSource extends Fie
 
       @Override
       public Object objectVal(int doc) {
-        int ord=termsIndex.getOrd(doc);
-        return ord==0 ? null  : NumberUtils.SortableStr2int(termsIndex.lookup(ord, spare));
+        return exists(doc) ? intVal(doc) : null;
       }
 
       @Override
@@ -187,11 +196,12 @@ class SortableIntFieldSource extends Fie
           @Override
           public void fillValue(int doc) {
             int ord=termsIndex.getOrd(doc);
-            if (ord == 0) {
+            if (ord == -1) {
               mval.value = def;
               mval.exists = false;
             } else {
-              mval.value = NumberUtils.SortableStr2int(termsIndex.lookup(ord, spare),0,3);
+              termsIndex.lookupOrd(ord, spare);
+              mval.value = NumberUtils.SortableStr2int(spare,0,3);
               mval.exists = true;
             }
           }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableLongField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableLongField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableLongField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/SortableLongField.java
Sun Mar 10 15:04:57 2013
@@ -136,6 +136,11 @@ class SortableLongFieldSource extends Fi
       }
 
       @Override
+      public boolean exists(int doc) {
+        return termsIndex.getOrd(doc) >= 0;
+      }
+
+      @Override
       public float floatVal(int doc) {
         return (float)longVal(doc);
       }
@@ -148,7 +153,12 @@ class SortableLongFieldSource extends Fi
       @Override
       public long longVal(int doc) {
         int ord=termsIndex.getOrd(doc);
-        return ord==0 ? def  : NumberUtils.SortableStr2long(termsIndex.lookup(ord, spare),0,5);
+        if (ord==-1) {
+          return def;
+        } else {
+          termsIndex.lookupOrd(ord, spare);
+          return NumberUtils.SortableStr2long(spare,0,5);
+        }
       }
 
       @Override
@@ -163,8 +173,7 @@ class SortableLongFieldSource extends Fi
 
       @Override
       public Object objectVal(int doc) {
-        int ord=termsIndex.getOrd(doc);
-        return ord==0 ? null  : NumberUtils.SortableStr2long(termsIndex.lookup(ord, spare));
+        return exists(doc) ? longVal(doc) : null;
       }
 
       @Override
@@ -185,11 +194,12 @@ class SortableLongFieldSource extends Fi
           @Override
           public void fillValue(int doc) {
             int ord=termsIndex.getOrd(doc);
-            if (ord == 0) {
+            if (ord == -1) {
               mval.value = def;
               mval.exists = false;
             } else {
-              mval.value = NumberUtils.SortableStr2long(termsIndex.lookup(ord, spare),0,5);
+              termsIndex.lookupOrd(ord, spare);
+              mval.value = NumberUtils.SortableStr2long(spare,0,5);
               mval.exists = true;
             }
           }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrField.java
Sun Mar 10 15:04:57 2013
@@ -17,20 +17,46 @@
 
 package org.apache.solr.schema;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.lucene.document.SortedDocValuesField;
+import org.apache.lucene.document.SortedSetDocValuesField;
+import org.apache.lucene.index.StorableField;
 import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.search.SortField;
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
-import org.apache.lucene.index.StorableField;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 
-import java.io.IOException;
-/**
- *
- */
 public class StrField extends PrimitiveFieldType {
+
+  @Override
+  protected void init(IndexSchema schema, Map<String,String> args) {
+    super.init(schema, args);
+  }
+
+  @Override
+  public List<StorableField> createFields(SchemaField field, Object value,
+      float boost) {
+    if (field.hasDocValues()) {
+      List<StorableField> fields = new ArrayList<StorableField>();
+      fields.add(createField(field, value, boost));
+      final BytesRef bytes = new BytesRef(value.toString());
+      if (field.multiValued()) {
+        fields.add(new SortedSetDocValuesField(field.getName(), bytes));
+      } else {
+        fields.add(new SortedDocValuesField(field.getName(), bytes));
+      }
+      return fields;
+    } else {
+      return Collections.singletonList(createField(field, value, boost));
+    }
+  }
+
   @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
@@ -51,6 +77,13 @@ public class StrField extends PrimitiveF
   public Object toObject(SchemaField sf, BytesRef term) {
     return term.utf8ToString();
   }
+
+  @Override
+  public void checkSchemaField(SchemaField field) {
+    if (field.hasDocValues() && !field.multiValued() && !(field.isRequired()
|| field.getDefaultValue() != null)) {
+      throw new IllegalStateException("Field " + this + " has single-valued doc values enabled,
but has no default value and is not required");
+    }
+  }
 }
 
 

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrFieldSource.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrFieldSource.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/StrFieldSource.java
Sun Mar 10 15:04:57 2013
@@ -52,7 +52,7 @@ public class StrFieldSource extends Fiel
 
       @Override
       public int numOrd() {
-        return termsIndex.numOrd();
+        return termsIndex.getValueCount();
       }
 
       @Override

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TextField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TextField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TextField.java
Sun Mar 10 15:04:57 2013
@@ -19,8 +19,6 @@ package org.apache.solr.schema;
 
 import org.apache.lucene.analysis.tokenattributes.TermToBytesRefAttribute;
 import org.apache.lucene.search.*;
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
@@ -58,6 +56,7 @@ public class TextField extends FieldType
    * @see #setMultiTermAnalyzer
    */
   protected Analyzer multiTermAnalyzer=null;
+  private boolean isExplicitMultiTermAnalyzer = false;
 
   @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
@@ -331,4 +330,11 @@ public class TextField extends FieldType
 
   }
 
+  public void setIsExplicitMultiTermAnalyzer(boolean isExplicitMultiTermAnalyzer) {
+    this.isExplicitMultiTermAnalyzer = isExplicitMultiTermAnalyzer;
+  }
+
+  public boolean isExplicitMultiTermAnalyzer() {
+    return isExplicitMultiTermAnalyzer;
+  }
 }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieDateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieDateField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieDateField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieDateField.java
Sun Mar 10 15:04:57 2013
@@ -17,22 +17,44 @@
 
 package org.apache.solr.schema;
 
-import org.apache.lucene.queries.function.ValueSource;
 import org.apache.solr.search.QParser;
+import org.apache.solr.common.SolrException;
 import org.apache.solr.response.TextResponseWriter;
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
+import org.apache.solr.update.processor.TimestampUpdateProcessorFactory; //jdoc
+import org.apache.lucene.document.FieldType.NumericType;
+import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.StorableField;
+import org.apache.lucene.queries.function.FunctionValues;
+import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.NumericRangeQuery;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.CharsRef;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Date;
 import java.io.IOException;
 
+/**
+ * <p>
+ * An extension of {@link DateField} that supports the same values and 
+ * syntax, but indexes the value more efficiently using a numeric 
+ * {@link TrieField} under the covers.  See the description of 
+ * {@link DateField} for more details of the supported usage.
+ * </p>
+ * <p>
+ * <b>NOTE:</b> Allthough it is possible to configure a <code>TrieDateField</code>

+ * instance with a default value of "<code>NOW</code>" to compute a timestamp

+ * of when the document was indexed, this is not advisable when using SolrCloud 
+ * since each replica of the document may compute a slightly different value. 
+ * {@link TimestampUpdateProcessorFactory} is recomended instead.
+ * </p>
+ *
+ * @see DateField
+ * @see TrieField
+ */
 public class TrieDateField extends DateField {
 
   final TrieField wrappedField = new TrieField() {{
@@ -73,6 +95,10 @@ public class TrieDateField extends DateF
     return wrappedField.getPrecisionStep();
   }
 
+  @Override
+  public NumericType getNumericType() {
+    return wrappedField.getNumericType();
+  }
 
   @Override
   public void write(TextResponseWriter writer, String name, StorableField f) throws IOException
{
@@ -130,6 +156,11 @@ public class TrieDateField extends DateF
   }
 
   @Override
+  public List<StorableField> createFields(SchemaField field, Object value, float boost)
{
+    return wrappedField.createFields(field, value, boost);
+  }
+
+  @Override
   public Query getRangeQuery(QParser parser, SchemaField field, String min, String max, boolean
minInclusive, boolean maxInclusive) {
     return wrappedField.getRangeQuery(parser, field, min, max, minInclusive, maxInclusive);
   }
@@ -141,4 +172,10 @@ public class TrieDateField extends DateF
               max == null ? null : max.getTime(),
               minInclusive, maxInclusive);
   }
+
+  @Override
+  public void checkSchemaField(SchemaField field) {
+    wrappedField.checkSchemaField(field);
+  }
+
 }

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/TrieField.java
Sun Mar 10 15:04:57 2013
@@ -17,7 +17,10 @@
 package org.apache.solr.schema;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
@@ -29,15 +32,20 @@ import org.apache.lucene.document.FieldT
 import org.apache.lucene.document.FloatField;
 import org.apache.lucene.document.IntField;
 import org.apache.lucene.document.LongField;
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
+import org.apache.lucene.document.NumericDocValuesField;
+import org.apache.lucene.document.SortedSetDocValuesField;
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.queries.function.valuesource.DoubleFieldSource;
 import org.apache.lucene.queries.function.valuesource.FloatFieldSource;
 import org.apache.lucene.queries.function.valuesource.IntFieldSource;
 import org.apache.lucene.queries.function.valuesource.LongFieldSource;
-import org.apache.lucene.search.*;
+import org.apache.lucene.search.ConstantScoreQuery;
+import org.apache.lucene.search.FieldCache;
+import org.apache.lucene.search.FieldCacheRangeFilter;
+import org.apache.lucene.search.NumericRangeQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.SortField;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.CharsRef;
 import org.apache.lucene.util.NumericUtils;
@@ -48,7 +56,6 @@ import org.apache.solr.analysis.TrieToke
 import org.apache.solr.common.SolrException;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.function.*;
 
 /**
  * Provides field types to support for Lucene's {@link
@@ -104,8 +111,7 @@ public class TrieField extends Primitive
                 "Invalid type specified in schema.xml for field: " + args.get("name"), e);
       }
     }
-  
-    
+
     CharFilterFactory[] filterFactories = new CharFilterFactory[0];
     TokenFilterFactory[] tokenFilterFactories = new TokenFilterFactory[0];
     analyzer = new TokenizerChain(filterFactories, new TrieTokenizerFactory(type, precisionStep),
tokenFilterFactories);
@@ -240,39 +246,96 @@ public class TrieField extends Primitive
   }
 
   @Override
+  public NumericType getNumericType() {
+    switch (type) {
+      case INTEGER:
+        return NumericType.INT;
+      case LONG:
+      case DATE:
+        return NumericType.LONG;
+      case FLOAT:
+        return NumericType.FLOAT;
+      case DOUBLE:
+        return NumericType.DOUBLE;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  @Override
   public Query getRangeQuery(QParser parser, SchemaField field, String min, String max, boolean
minInclusive, boolean maxInclusive) {
+    if (field.multiValued() && field.hasDocValues() && !field.indexed())
{
+      // for the multi-valued dv-case, the default rangeimpl over toInternal is correct
+      return super.getRangeQuery(parser, field, min, max, minInclusive, maxInclusive);
+    }
     int ps = precisionStep;
     Query query = null;
+    final boolean matchOnly = field.hasDocValues() && !field.indexed();
     switch (type) {
       case INTEGER:
-        query = NumericRangeQuery.newIntRange(field.getName(), ps,
+        if (matchOnly) {
+          query = new ConstantScoreQuery(FieldCacheRangeFilter.newIntRange(field.getName(),
+                min == null ? null : Integer.parseInt(min),
+                max == null ? null : Integer.parseInt(max),
+                minInclusive, maxInclusive));
+        } else {
+          query = NumericRangeQuery.newIntRange(field.getName(), ps,
                 min == null ? null : Integer.parseInt(min),
                 max == null ? null : Integer.parseInt(max),
                 minInclusive, maxInclusive);
+        }
         break;
       case FLOAT:
-        query = NumericRangeQuery.newFloatRange(field.getName(), ps,
+        if (matchOnly) {
+          query = new ConstantScoreQuery(FieldCacheRangeFilter.newFloatRange(field.getName(),
+                min == null ? null : Float.parseFloat(min),
+                max == null ? null : Float.parseFloat(max),
+                minInclusive, maxInclusive));
+        } else {
+          query = NumericRangeQuery.newFloatRange(field.getName(), ps,
                 min == null ? null : Float.parseFloat(min),
                 max == null ? null : Float.parseFloat(max),
                 minInclusive, maxInclusive);
+        }
         break;
       case LONG:
-        query = NumericRangeQuery.newLongRange(field.getName(), ps,
+        if (matchOnly) {
+          query = new ConstantScoreQuery(FieldCacheRangeFilter.newLongRange(field.getName(),
+                min == null ? null : Long.parseLong(min),
+                max == null ? null : Long.parseLong(max),
+                minInclusive, maxInclusive));
+        } else {
+          query = NumericRangeQuery.newLongRange(field.getName(), ps,
                 min == null ? null : Long.parseLong(min),
                 max == null ? null : Long.parseLong(max),
                 minInclusive, maxInclusive);
+        }
         break;
       case DOUBLE:
-        query = NumericRangeQuery.newDoubleRange(field.getName(), ps,
+        if (matchOnly) {
+          query = new ConstantScoreQuery(FieldCacheRangeFilter.newDoubleRange(field.getName(),
+                min == null ? null : Double.parseDouble(min),
+                max == null ? null : Double.parseDouble(max),
+                minInclusive, maxInclusive));
+        } else {
+          query = NumericRangeQuery.newDoubleRange(field.getName(), ps,
                 min == null ? null : Double.parseDouble(min),
                 max == null ? null : Double.parseDouble(max),
                 minInclusive, maxInclusive);
+        }
         break;
       case DATE:
-        query = NumericRangeQuery.newLongRange(field.getName(), ps,
+        if (matchOnly) {
+          query = new ConstantScoreQuery(FieldCacheRangeFilter.newLongRange(field.getName(),
+                min == null ? null : dateField.parseMath(null, min).getTime(),
+                max == null ? null : dateField.parseMath(null, max).getTime(),
+                minInclusive, maxInclusive));
+        } else {
+          query = NumericRangeQuery.newLongRange(field.getName(), ps,
                 min == null ? null : dateField.parseMath(null, min).getTime(),
                 max == null ? null : dateField.parseMath(null, max).getTime(),
                 minInclusive, maxInclusive);
+        }
         break;
       default:
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie
field");
@@ -280,6 +343,16 @@ public class TrieField extends Primitive
 
     return query;
   }
+  
+  @Override
+  public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) {
+    if (!field.indexed() && field.hasDocValues()) {
+      // currently implemented as singleton range
+      return getRangeQuery(parser, field, externalVal, externalVal, true, true);
+    } else {
+      return super.getFieldQuery(parser, field, externalVal);
+    }
+  }
 
   @Deprecated
   static int toInt(byte[] arr, int offset) {
@@ -311,19 +384,19 @@ public class TrieField extends Primitive
     String s = val.toString();
     switch (type) {
       case INTEGER:
-        NumericUtils.intToPrefixCoded(Integer.parseInt(s), 0, result);
+        NumericUtils.intToPrefixCodedBytes(Integer.parseInt(s), 0, result);
         break;
       case FLOAT:
-        NumericUtils.intToPrefixCoded(NumericUtils.floatToSortableInt(Float.parseFloat(s)),
0, result);
+        NumericUtils.intToPrefixCodedBytes(NumericUtils.floatToSortableInt(Float.parseFloat(s)),
0, result);
         break;
       case LONG:
-        NumericUtils.longToPrefixCoded(Long.parseLong(s), 0, result);
+        NumericUtils.longToPrefixCodedBytes(Long.parseLong(s), 0, result);
         break;
       case DOUBLE:
-        NumericUtils.longToPrefixCoded(NumericUtils.doubleToSortableLong(Double.parseDouble(s)),
0, result);
+        NumericUtils.longToPrefixCodedBytes(NumericUtils.doubleToSortableLong(Double.parseDouble(s)),
0, result);
         break;
       case DATE:
-        NumericUtils.longToPrefixCoded(dateField.parseMath(null, s).getTime(), 0, result);
+        NumericUtils.longToPrefixCodedBytes(dateField.parseMath(null, s).getTime(), 0, result);
         break;
       default:
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie
field: " + type);
@@ -419,17 +492,17 @@ public class TrieField extends Primitive
     if (val != null) {
       switch (type) {
         case INTEGER:
-          NumericUtils.intToPrefixCoded(val.intValue(), 0, bytes);
+          NumericUtils.intToPrefixCodedBytes(val.intValue(), 0, bytes);
           break;
         case FLOAT:
-          NumericUtils.intToPrefixCoded(NumericUtils.floatToSortableInt(val.floatValue()),
0, bytes);
+          NumericUtils.intToPrefixCodedBytes(NumericUtils.floatToSortableInt(val.floatValue()),
0, bytes);
           break;
         case LONG: //fallthrough!
         case DATE:
-          NumericUtils.longToPrefixCoded(val.longValue(), 0, bytes);
+          NumericUtils.longToPrefixCodedBytes(val.longValue(), 0, bytes);
           break;
         case DOUBLE:
-          NumericUtils.longToPrefixCoded(NumericUtils.doubleToSortableLong(val.doubleValue()),
0, bytes);
+          NumericUtils.longToPrefixCodedBytes(NumericUtils.doubleToSortableLong(val.doubleValue()),
0, bytes);
           break;
         default:
           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type for
trie field: " + f.name());
@@ -441,7 +514,7 @@ public class TrieField extends Primitive
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Invalid field contents:
"+f.name());
       switch (type) {
         case INTEGER:
-          NumericUtils.intToPrefixCoded(toInt(bytesRef.bytes, bytesRef.offset), 0, bytes);
+          NumericUtils.intToPrefixCodedBytes(toInt(bytesRef.bytes, bytesRef.offset), 0, bytes);
           break;
         case FLOAT: {
           // WARNING: Code Duplication! Keep in sync with o.a.l.util.NumericUtils!
@@ -449,12 +522,12 @@ public class TrieField extends Primitive
           // code in next 2 lines is identical to: int v = NumericUtils.floatToSortableInt(Float.intBitsToFloat(toInt(arr)));
           int v = toInt(bytesRef.bytes, bytesRef.offset);
           if (v<0) v ^= 0x7fffffff;
-          NumericUtils.intToPrefixCoded(v, 0, bytes);
+          NumericUtils.intToPrefixCodedBytes(v, 0, bytes);
           break;
         }
         case LONG: //fallthrough!
         case DATE:
-          NumericUtils.longToPrefixCoded(toLong(bytesRef.bytes, bytesRef.offset), 0, bytes);
+          NumericUtils.longToPrefixCodedBytes(toLong(bytesRef.bytes, bytesRef.offset), 0,
bytes);
           break;
         case DOUBLE: {
           // WARNING: Code Duplication! Keep in sync with o.a.l.util.NumericUtils!
@@ -462,7 +535,7 @@ public class TrieField extends Primitive
           // code in next 2 lines is identical to: long v = NumericUtils.doubleToSortableLong(Double.longBitsToDouble(toLong(arr)));
           long v = toLong(bytesRef.bytes, bytesRef.offset);
           if (v<0) v ^= 0x7fffffffffffffffL;
-          NumericUtils.longToPrefixCoded(v, 0, bytes);
+          NumericUtils.longToPrefixCodedBytes(v, 0, bytes);
           break;
         }
         default:
@@ -476,8 +549,9 @@ public class TrieField extends Primitive
   public StorableField createField(SchemaField field, Object value, float boost) {
     boolean indexed = field.indexed();
     boolean stored = field.stored();
+    boolean docValues = field.hasDocValues();
 
-    if (!indexed && !stored) {
+    if (!indexed && !stored && !docValues) {
       if (log.isTraceEnabled())
         log.trace("Ignoring unindexed/unstored field: " + field);
       return null;
@@ -552,6 +626,36 @@ public class TrieField extends Primitive
     return f;
   }
 
+  @Override
+  public List<StorableField> createFields(SchemaField sf, Object value, float boost)
{
+    if (sf.hasDocValues()) {
+      List<StorableField> fields = new ArrayList<StorableField>();
+      final StorableField field = createField(sf, value, boost);
+      fields.add(field);
+      
+      if (sf.multiValued()) {
+        BytesRef bytes = new BytesRef();
+        readableToIndexed(value.toString(), bytes);
+        fields.add(new SortedSetDocValuesField(sf.getName(), bytes));
+      } else {
+        final long bits;
+        if (field.numericValue() instanceof Integer || field.numericValue() instanceof Long)
{
+          bits = field.numericValue().longValue();
+        } else if (field.numericValue() instanceof Float) {
+          bits = Float.floatToIntBits(field.numericValue().floatValue());
+        } else {
+          assert field.numericValue() instanceof Double;
+          bits = Double.doubleToLongBits(field.numericValue().doubleValue());
+        }
+        fields.add(new NumericDocValuesField(sf.getName(), bits));
+      }
+      
+      return fields;
+    } else {
+      return Collections.singletonList(createField(sf, value, boost));
+    }
+  }
+
   public enum TrieTypes {
     INTEGER,
     LONG,
@@ -589,6 +693,13 @@ public class TrieField extends Primitive
     }
     return null;
   }
+
+  @Override
+  public void checkSchemaField(final SchemaField field) {
+    if (field.hasDocValues() && !field.multiValued() && !(field.isRequired()
|| field.getDefaultValue() != null)) {
+      throw new IllegalStateException("Field " + this + " has single-valued doc values enabled,
but has no default value and is not required");
+    }
+  }
 }
 
 class TrieDateFieldSource extends LongFieldSource {
@@ -608,14 +719,20 @@ class TrieDateFieldSource extends LongFi
   }
 
   @Override
-  public Object longToObject(long val) {
+  public Date longToObject(long val) {
     return new Date(val);
   }
 
   @Override
+  public String longToString(long val) {
+    return TrieField.dateField.toExternal(longToObject(val));
+  }
+
+  @Override
   public long externalToLong(String extVal) {
     return TrieField.dateField.parseMath(null, extVal).getTime();
   }
+
 }
 
 

Modified: lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/UUIDField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/UUIDField.java?rev=1454862&r1=1454861&r2=1454862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/UUIDField.java
(original)
+++ lucene/dev/branches/lucene4258/solr/core/src/java/org/apache/solr/schema/UUIDField.java
Sun Mar 10 15:04:57 2013
@@ -22,17 +22,26 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.lucene.index.GeneralField;
-import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.search.SortField;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.response.TextResponseWriter;
-
+import org.apache.solr.update.processor.UUIDUpdateProcessorFactory; // jdoc
 /**
+ * <p>
  * This FieldType accepts UUID string values, as well as the special value 
  * of "NEW" which triggers generation of a new random UUID.
- *
+ * </p>
+ * <p>
+ * <b>NOTE:</b> Configuring a <code>UUIDField</code> 
+ * instance with a default value of "<code>NEW</code>" is not advisable for 
+ * most users when using SolrCloud (and not possible if the UUID value is 
+ * configured as the unique key field) since the result will be that each 
+ * replica of each document will get a unique UUID value.  
+ * Using {@link UUIDUpdateProcessorFactory} to generate UUID values when 
+ * documents are added is recomended instead.
+ * </p>
+ * 
  * @see UUID#toString
  * @see UUID#randomUUID
  *



Mime
View raw message