You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2014/12/01 18:25:47 UTC

svn commit: r1642718 [10/12] - in /lucene/dev/branches/lucene2878: ./ dev-tools/ dev-tools/eclipse/dot.settings/ dev-tools/idea/.idea/ dev-tools/idea/lucene/benchmark/src/ dev-tools/idea/lucene/highlighter/ dev-tools/maven/ dev-tools/maven/solr/webapp/...

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java Mon Dec  1 17:25:39 2014
@@ -60,7 +60,6 @@ public class RestManager {
   public static final Logger log = LoggerFactory.getLogger(RestManager.class);
   
   public static final String SCHEMA_BASE_PATH = "/schema";
-  public static final String CONFIG_BASE_PATH = "/config";
   public static final String MANAGED_ENDPOINT = "/managed";
   
   // used for validating resourceIds provided during registration
@@ -118,15 +117,12 @@ public class RestManager {
     private final Pattern reservedEndpointsPattern;
 
     public Registry() {
-      reservedEndpoints.add(CONFIG_BASE_PATH + MANAGED_ENDPOINT);
       reservedEndpoints.add(SCHEMA_BASE_PATH + MANAGED_ENDPOINT);
 
       for (String reservedEndpoint : SolrSchemaRestApi.getReservedEndpoints()) {
         reservedEndpoints.add(reservedEndpoint);
       }
-      for (String reservedEndpoint : SolrConfigRestApi.getReservedEndpoints()) {
-        reservedEndpoints.add(reservedEndpoint);
-      }
+
       reservedEndpointsPattern = getReservedEndpointsPattern();
     }
 
@@ -192,8 +188,8 @@ public class RestManager {
       Matcher resourceIdValidator = resourceIdRegex.matcher(resourceId);
       if (!resourceIdValidator.matches()) {
         String errMsg = String.format(Locale.ROOT,
-            "Invalid resourceId '%s'; must start with %s or %s.",
-            resourceId, CONFIG_BASE_PATH, SCHEMA_BASE_PATH);
+            "Invalid resourceId '%s'; must start with  %s.",
+            resourceId,  SCHEMA_BASE_PATH);
         throw new SolrException(ErrorCode.SERVER_ERROR, errMsg);        
       }
          
@@ -603,7 +599,6 @@ public class RestManager {
     endpoint = new RestManagerManagedResource(this);
     endpoint.loadManagedDataAndNotify(null); // no observers for my endpoint
     // responds to requests to /config/managed and /schema/managed
-    managed.put(CONFIG_BASE_PATH+MANAGED_ENDPOINT, endpoint);
     managed.put(SCHEMA_BASE_PATH+MANAGED_ENDPOINT, endpoint);
             
     // init registered managed resources
@@ -734,10 +729,7 @@ public class RestManager {
    * @param router - Restlet Router
    */
   public synchronized void attachManagedResources(String routerPath, Router router) {
-    
-    if (CONFIG_BASE_PATH.equals(routerPath)) {
-      this.configRouter = router;
-    } else if (SCHEMA_BASE_PATH.equals(routerPath)) {
+    if (SCHEMA_BASE_PATH.equals(routerPath)) {
       this.schemaRouter = router;
     } else {
       throw new SolrException(ErrorCode.SERVER_ERROR, 

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java Mon Dec  1 17:25:39 2014
@@ -18,21 +18,12 @@ package org.apache.solr.rest;
 
 import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.rest.schema.CopyFieldCollectionResource;
-import org.apache.solr.rest.schema.SchemaResource;
-import org.apache.solr.rest.schema.DefaultSearchFieldResource;
 import org.apache.solr.rest.schema.DynamicFieldCollectionResource;
 import org.apache.solr.rest.schema.DynamicFieldResource;
 import org.apache.solr.rest.schema.FieldCollectionResource;
 import org.apache.solr.rest.schema.FieldResource;
 import org.apache.solr.rest.schema.FieldTypeCollectionResource;
 import org.apache.solr.rest.schema.FieldTypeResource;
-import org.apache.solr.rest.schema.SchemaNameResource;
-import org.apache.solr.rest.schema.SchemaSimilarityResource;
-import org.apache.solr.rest.schema.SchemaVersionResource;
-import org.apache.solr.rest.schema.SchemaZkVersionResource;
-import org.apache.solr.rest.schema.SolrQueryParserDefaultOperatorResource;
-import org.apache.solr.rest.schema.SolrQueryParserResource;
-import org.apache.solr.rest.schema.UniqueKeyFieldResource;
 import org.apache.solr.schema.IndexSchema;
 import org.restlet.Application;
 import org.restlet.Restlet;
@@ -58,30 +49,11 @@ public class SolrSchemaRestApi extends A
   public static final String FIELDTYPES = IndexSchema.FIELD_TYPES.toLowerCase(Locale.ROOT);
   public static final String FIELDTYPES_PATH = "/" + FIELDTYPES;
 
-  public static final String NAME_PATH = "/" + IndexSchema.NAME.toLowerCase(Locale.ROOT);
   public static final String NAME_SEGMENT = "/{" + IndexSchema.NAME.toLowerCase(Locale.ROOT) + "}";
   
   public static final String COPY_FIELDS = IndexSchema.COPY_FIELDS.toLowerCase(Locale.ROOT);
   public static final String COPY_FIELDS_PATH = "/" + COPY_FIELDS;
   
-  public static final String VERSION_PATH = "/" + IndexSchema.VERSION.toLowerCase(Locale.ROOT);
-  
-  public static final String DEFAULT_SEARCH_FIELD = IndexSchema.DEFAULT_SEARCH_FIELD.toLowerCase(Locale.ROOT);
-  public static final String DEFAULT_SEARCH_FIELD_PATH = "/" + DEFAULT_SEARCH_FIELD;
-  
-  public static final String SIMILARITY_PATH = "/" + IndexSchema.SIMILARITY.toLowerCase(Locale.ROOT);
-  
-  public static final String SOLR_QUERY_PARSER = IndexSchema.SOLR_QUERY_PARSER.toLowerCase(Locale.ROOT);
-  public static final String SOLR_QUERY_PARSER_PATH = "/" + SOLR_QUERY_PARSER;
-  
-  public static final String DEFAULT_OPERATOR = IndexSchema.DEFAULT_OPERATOR.toLowerCase(Locale.ROOT);
-  public static final String DEFAULT_OPERATOR_PATH = SOLR_QUERY_PARSER_PATH + "/" + DEFAULT_OPERATOR;
-  
-  public static final String UNIQUE_KEY_FIELD = IndexSchema.UNIQUE_KEY.toLowerCase(Locale.ROOT);
-  public static final String UNIQUE_KEY_FIELD_PATH = "/" + UNIQUE_KEY_FIELD;
-  
-  public static final String ZK_VERSION_PATH = "/zkversion";  
-
   /**
    * Returns reserved endpoints under /schema
    */
@@ -90,15 +62,7 @@ public class SolrSchemaRestApi extends A
     reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + FIELDS_PATH);
     reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DYNAMIC_FIELDS_PATH);
     reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + FIELDTYPES_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + NAME_PATH);
     reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + COPY_FIELDS_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + VERSION_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DEFAULT_SEARCH_FIELD_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + SIMILARITY_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + SOLR_QUERY_PARSER_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DEFAULT_OPERATOR_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + UNIQUE_KEY_FIELD_PATH);
-    reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + ZK_VERSION_PATH);
     return Collections.unmodifiableSet(reservedEndpoints);
   }
 
@@ -123,10 +87,7 @@ public class SolrSchemaRestApi extends A
 
     log.info("createInboundRoot started for /schema");
 
-    router.attach("", SchemaResource.class);
-    // Allow a trailing slash on full-schema requests
-    router.attach("/", SchemaResource.class);
-    
+
     router.attach(FIELDS_PATH, FieldCollectionResource.class);
     // Allow a trailing slash on collection requests
     router.attach(FIELDS_PATH + "/", FieldCollectionResource.class);
@@ -145,23 +106,7 @@ public class SolrSchemaRestApi extends A
     router.attach(COPY_FIELDS_PATH, CopyFieldCollectionResource.class);
     // Allow a trailing slash on collection requests
     router.attach(COPY_FIELDS_PATH + "/", CopyFieldCollectionResource.class);
-    
-    router.attach(NAME_PATH, SchemaNameResource.class);
-    
-    router.attach(VERSION_PATH, SchemaVersionResource.class);
-    
-    router.attach(UNIQUE_KEY_FIELD_PATH, UniqueKeyFieldResource.class);
 
-    router.attach(DEFAULT_SEARCH_FIELD_PATH, DefaultSearchFieldResource.class);
-    
-    router.attach(SIMILARITY_PATH, SchemaSimilarityResource.class);
-
-    // At present solrQueryParser only contains defaultOperator, but there may be more children in the future
-    router.attach(SOLR_QUERY_PARSER_PATH, SolrQueryParserResource.class);
-    router.attach(DEFAULT_OPERATOR_PATH, SolrQueryParserDefaultOperatorResource.class);
-
-    router.attach(ZK_VERSION_PATH, SchemaZkVersionResource.class);
-    
     router.attachDefault(RestManager.ManagedEndpoint.class);
     
     // attach all the dynamically registered schema resources

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java Mon Dec  1 17:25:39 2014
@@ -59,6 +59,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 
@@ -76,6 +78,11 @@ public abstract class AbstractSpatialFie
    */
   public static final String FILTER_PARAM = "filter";
 
+  //score param values:
+  public static final String DISTANCE = "distance";
+  public static final String RECIP_DISTANCE = "recipDistance";
+  public static final String NONE = "none";
+
   protected final Logger log = LoggerFactory.getLogger( getClass() );
 
   protected SpatialContext ctx;
@@ -83,6 +90,21 @@ public abstract class AbstractSpatialFie
 
   private final Cache<String, T> fieldStrategyCache = CacheBuilder.newBuilder().build();
 
+  protected final Set<String> supportedScoreModes;
+
+  protected AbstractSpatialFieldType() {
+    this(Collections.emptySet());
+  }
+
+  protected AbstractSpatialFieldType(Set<String> moreScoreModes) {
+    Set<String> set = new TreeSet<>();//sorted for consistent display order
+    set.add(NONE);
+    set.add(DISTANCE);
+    set.add(RECIP_DISTANCE);
+    set.addAll(moreScoreModes);
+    supportedScoreModes = Collections.unmodifiableSet(set);
+  }
+
   @Override
   protected void init(IndexSchema schema, Map<String, String> args) {
     super.init(schema, args);
@@ -290,16 +312,27 @@ public abstract class AbstractSpatialFie
     return new FilteredQuery(functionQuery, filter);
   }
 
+  /** The set of values supported for the score local-param. Not null. */
+  public Set<String> getSupportedScoreModes() {
+    return supportedScoreModes;
+  }
+
   protected ValueSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String score, T strategy) {
-    if (score == null || "none".equals(score) || "".equals(score)) {
+    if (score == null) {
       return null;
-    } else if ("distance".equals(score)) {
-      double multiplier = 1.0;//TODO support units=kilometers
-      return strategy.makeDistanceValueSource(spatialArgs.getShape().getCenter(), multiplier);
-    } else if ("recipDistance".equals(score)) {
-      return strategy.makeRecipDistanceValueSource(spatialArgs.getShape());
-    } else {
-      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'score' local-param must be one of 'none', 'distance', or 'recipDistance'");
+    }
+    switch (score) {
+      case NONE:
+      case "":
+        return null;
+      case DISTANCE:
+        double multiplier = 1.0;//TODO support units=kilometers
+        return strategy.makeDistanceValueSource(spatialArgs.getShape().getCenter(), multiplier);
+      case RECIP_DISTANCE:
+        return strategy.makeRecipDistanceValueSource(spatialArgs.getShape());
+      default:
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+            "'score' local-param must be one of " + supportedScoreModes);
     }
   }
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java Mon Dec  1 17:25:39 2014
@@ -28,17 +28,29 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.search.QParser;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
 public class BBoxField extends AbstractSpatialFieldType<BBoxStrategy> implements SchemaAware {
   private static final String PARAM_QUERY_TARGET_PROPORTION = "queryTargetProportion";
   private static final String PARAM_MIN_SIDE_LENGTH = "minSideLength";
-  private String numberFieldName;//required
-  private String booleanFieldName = "boolean";
+
+  //score modes:
+  private static final String OVERLAP_RATIO = "overlapRatio";
+  private static final String AREA = "area";
+  private static final String AREA2D = "area2D";
+
+  private String numberTypeName;//required
+  private String booleanTypeName = "boolean";
 
   private IndexSchema schema;
 
+  public BBoxField() {
+    super(new HashSet<>(Arrays.asList(OVERLAP_RATIO, AREA, AREA2D)));
+  }
+
   @Override
   protected void init(IndexSchema schema, Map<String, String> args) {
     super.init(schema, args);
@@ -48,25 +60,25 @@ public class BBoxField extends AbstractS
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "The field type: " + typeName
           + " must specify the numberType attribute.");
     }
-    numberFieldName = v;
+    numberTypeName = v;
 
     v = args.remove("booleanType");
     if (v != null) {
-      booleanFieldName = v;
+      booleanTypeName = v;
     }
   }
 
   @Override
   public void inform(IndexSchema schema) {
     this.schema = schema;
-    FieldType numberType = schema.getFieldTypeByName(numberFieldName);
-    FieldType booleanType = schema.getFieldTypeByName(booleanFieldName);
+    FieldType numberType = schema.getFieldTypeByName(numberTypeName);
+    FieldType booleanType = schema.getFieldTypeByName(booleanTypeName);
 
     if (numberType == null) {
-      throw new RuntimeException("Cannot find number fieldType: " + numberFieldName);
+      throw new RuntimeException("Cannot find number fieldType: " + numberTypeName);
     }
     if (booleanType == null) {
-      throw new RuntimeException("Cannot find boolean fieldType: " + booleanFieldName);
+      throw new RuntimeException("Cannot find boolean fieldType: " + booleanTypeName);
     }
     if (!(booleanType instanceof BoolField)) {
       throw new RuntimeException("Must be a BoolField: " + booleanType);
@@ -75,33 +87,47 @@ public class BBoxField extends AbstractS
       throw new RuntimeException("Must be TrieDoubleField: " + numberType);
     }
 
+    //note: this only works for explicit fields, not dynamic fields
     List<SchemaField> fields = new ArrayList<>(schema.getFields().values());//copy, because we modify during iteration
     for (SchemaField sf : fields) {
       if (sf.getType() == this) {
         String name = sf.getName();
-        register(schema, name + BBoxStrategy.SUFFIX_MINX, numberType);
-        register(schema, name + BBoxStrategy.SUFFIX_MAXX, numberType);
-        register(schema, name + BBoxStrategy.SUFFIX_MINY, numberType);
-        register(schema, name + BBoxStrategy.SUFFIX_MAXY, numberType);
-        register(schema, name + BBoxStrategy.SUFFIX_XDL, booleanType);
+        registerSubFields(schema, name, numberType, booleanType);
       }
     }
   }
 
+  private void registerSubFields(IndexSchema schema, String name, FieldType numberType, FieldType booleanType) {
+    register(schema, name + BBoxStrategy.SUFFIX_MINX, numberType);
+    register(schema, name + BBoxStrategy.SUFFIX_MAXX, numberType);
+    register(schema, name + BBoxStrategy.SUFFIX_MINY, numberType);
+    register(schema, name + BBoxStrategy.SUFFIX_MAXY, numberType);
+    register(schema, name + BBoxStrategy.SUFFIX_XDL, booleanType);
+  }
+
+  // note: Registering the field is probably optional; it makes it show up in the schema browser and may have other
+  //  benefits.
   private void register(IndexSchema schema, String name, FieldType fieldType) {
     SchemaField sf = new SchemaField(name, fieldType);
     schema.getFields().put(sf.getName(), sf);
   }
 
   @Override
-  protected BBoxStrategy newSpatialStrategy(String s) {
-    BBoxStrategy strategy = new BBoxStrategy(ctx, s);
+  protected BBoxStrategy newSpatialStrategy(String fieldName) {
+    //if it's a dynamic field, we register the sub-fields now.
+    FieldType numberType = schema.getFieldTypeByName(numberTypeName);
+    FieldType booleanType = schema.getFieldTypeByName(booleanTypeName);
+    if (schema.isDynamicField(fieldName)) {
+      registerSubFields(schema, fieldName, numberType, booleanType);
+    }
+
+    BBoxStrategy strategy = new BBoxStrategy(ctx, fieldName);
     //Solr's FieldType ought to expose Lucene FieldType. Instead as a hack we create a Field with a dummy value.
-    SchemaField field = schema.getField(strategy.getFieldName() + BBoxStrategy.SUFFIX_MINX);
+    final SchemaField solrNumField = new SchemaField("_", numberType);//dummy temp
     org.apache.lucene.document.FieldType luceneType =
-        (org.apache.lucene.document.FieldType) field.createField(0.0, 1.0f).fieldType();
-    //and annoyingly this field isn't going to have a docValues format because Solr uses a separate Field for that
-    if (field.hasDocValues()) {
+        (org.apache.lucene.document.FieldType) solrNumField.createField(0.0, 1.0f).fieldType();
+    //and annoyingly this Field isn't going to have a docValues format because Solr uses a separate Field for that
+    if (solrNumField.hasDocValues()) {
       luceneType = new org.apache.lucene.document.FieldType(luceneType);
       luceneType.setDocValuesType(DocValuesType.NUMERIC);
     }
@@ -111,9 +137,12 @@ public class BBoxField extends AbstractS
 
   @Override
   protected ValueSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String scoreParam, BBoxStrategy strategy) {
+    if (scoreParam == null) {
+      return null;
+    }
     switch (scoreParam) {
       //TODO move these to superclass after LUCENE-5804 ?
-      case "overlapRatio":
+      case OVERLAP_RATIO:
         double queryTargetProportion = 0.25;//Suggested default; weights towards target area
 
         String v = parser.getParam(PARAM_QUERY_TARGET_PROPORTION);
@@ -130,10 +159,10 @@ public class BBoxField extends AbstractS
             (Rectangle) spatialArgs.getShape(),
             queryTargetProportion, minSideLength);
 
-      case "area":
+      case AREA:
         return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, ctx.isGeo());
 
-      case "area2D":
+      case AREA2D:
         return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, false);
 
       default:

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java Mon Dec  1 17:25:39 2014
@@ -18,17 +18,26 @@ package org.apache.solr.schema;
  */
 
 
+import org.apache.solr.cloud.ZkController;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.core.ConfigOverlay;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.rest.BaseSolrResource;
 import org.apache.solr.util.CommandOperation;
+import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.Reader;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -79,7 +88,7 @@ public class SchemaManager {
    * @param rdr The input as a Reader
    * @return Lis of errors . If the List is empty then the operation is successful.
    */
-  public List performOperations(Reader rdr)  {
+  public List performOperations(Reader rdr) throws Exception {
     List<CommandOperation> ops = null;
     try {
       ops = CommandOperation.parse(rdr);
@@ -102,13 +111,13 @@ public class SchemaManager {
 
   }
 
-  private List doOperations(List<CommandOperation> operations){
+  private List doOperations(List<CommandOperation> operations) throws InterruptedException, IOException, KeeperException {
     int timeout = req.getParams().getInt(BaseSolrResource.UPDATE_TIMEOUT_SECS, -1);
     long startTime = System.nanoTime();
-    long endTime = timeout >0  ? System.nanoTime()+ (timeout * 1000*1000) : Long.MAX_VALUE;
+    long endTime = timeout > 0 ? System.nanoTime() + (timeout * 1000 * 1000) : Long.MAX_VALUE;
     SolrCore core = req.getCore();
-    for(;System.nanoTime() < endTime ;) {
-      managedIndexSchema = (ManagedIndexSchema) core.getLatestSchema();
+    for (; System.nanoTime() < endTime; ) {
+      managedIndexSchema = getFreshManagedSchema();
       for (CommandOperation op : operations) {
         if (ADD_FIELD.equals(op.name) || ADD_DYNAMIC_FIELD.equals(op.name)) {
           applyAddField(op);
@@ -123,20 +132,51 @@ public class SchemaManager {
       }
       List errs = CommandOperation.captureErrors(operations);
       if (!errs.isEmpty()) return errs;
+      SolrResourceLoader loader = req.getCore().getResourceLoader();
+      if (loader instanceof ZkSolrResourceLoader) {
 
-      try {
-        managedIndexSchema.persistManagedSchema(false);
-        core.setLatestSchema(managedIndexSchema);
-        waitForOtherReplicasToUpdate(timeout, startTime);
-        return EMPTY_LIST;
-      } catch (ManagedIndexSchema.SchemaChangedInZkException e) {
-        String s = "Failed to update schema because schema is modified";
-        log.warn(s, e);
-        continue;
-      } catch (Exception e){
-        String s = "Exception persisting schema";
-        log.warn(s, e);
-        return singletonList(s + e.getMessage());
+        StringWriter sw = new StringWriter();
+        try {
+          managedIndexSchema.persist(sw);
+        } catch (IOException e) {
+          log.info("race condition ");
+          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "unable to serialize schema");
+          //unlikely
+        }
+
+        try {
+          ZkController.persistConfigResourceToZooKeeper(loader,
+              managedIndexSchema.getSchemaZkVersion(),
+              managedIndexSchema.getResourceName(),
+              sw.toString().getBytes(StandardCharsets.UTF_8),
+              true);
+          return EMPTY_LIST;
+        } catch (ZkController.ResourceModifiedInZkException e) {
+          log.info("Race condition schema modified by another node");
+          continue;
+        } catch (Exception e) {
+          String s = "Exception persisting schema";
+          log.warn(s, e);
+          return singletonList(s + e.getMessage());
+        }
+
+      }else {
+
+        try {
+          //only for non cloud stuff
+          managedIndexSchema.persistManagedSchema(false);
+          core.setLatestSchema(managedIndexSchema);
+          waitForOtherReplicasToUpdate(timeout, startTime);
+          return EMPTY_LIST;
+        } catch (ManagedIndexSchema.SchemaChangedInZkException e) {
+          String s = "Failed to update schema because schema is modified";
+          log.warn(s, e);
+          continue;
+        } catch (Exception e) {
+          String s = "Exception persisting schema";
+          log.warn(s, e);
+          return singletonList(s + e.getMessage());
+        }
       }
     }
 
@@ -231,4 +271,28 @@ public class SchemaManager {
     return true;
   }
 
+  public ManagedIndexSchema getFreshManagedSchema() throws IOException, KeeperException, InterruptedException {
+    SolrResourceLoader resourceLoader = req.getCore().getResourceLoader();
+    if (resourceLoader instanceof ZkSolrResourceLoader) {
+      ZkSolrResourceLoader loader = (ZkSolrResourceLoader) resourceLoader;
+      InputStream in = resourceLoader.openResource(req.getSchema().getResourceName());
+      if (in instanceof ZkSolrResourceLoader.ZkByteArrayInputStream) {
+        int version = ((ZkSolrResourceLoader.ZkByteArrayInputStream) in).getStat().getVersion();
+        log.info("managed schema loaded . version : {} ", version);
+        return new ManagedIndexSchema(req.getCore().getSolrConfig(),
+            req.getSchema().getResourceName() ,new InputSource(in),
+            true,
+            req.getSchema().getResourceName(),
+            version,new Object());
+      }else {
+        return (ManagedIndexSchema) req.getCore().getLatestSchema();
+      }
+
+    } else {
+      return (ManagedIndexSchema) req.getCore().getLatestSchema();
+    }
+
+
+
+  }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Mon Dec  1 17:25:39 2014
@@ -753,9 +753,7 @@ public class SolrIndexSearcher extends I
    * @return the first document number containing the term
    */
   public int getFirstMatch(Term t) throws IOException {
-    Fields fields = leafReader.fields();
-    if (fields == null) return -1;
-    Terms terms = fields.terms(t.field());
+    Terms terms = leafReader.terms(t.field());
     if (terms == null) return -1;
     BytesRef termBytes = t.bytes();
     final TermsEnum termsEnum = terms.iterator(null);

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java Mon Dec  1 17:25:39 2014
@@ -132,9 +132,9 @@ public class FileFloatSource extends Val
    * @param reader the IndexReader whose cache needs refreshing
    */
   public void refreshCache(IndexReader reader) {
-    log.info("Refreshing FlaxFileFloatSource cache for field {}", this.field.getName());
+    log.info("Refreshing FileFloatSource cache for field {}", this.field.getName());
     floatCache.refresh(reader, new Entry(this));
-    log.info("FlaxFileFloatSource cache for field {} reloaded", this.field.getName());
+    log.info("FileFloatSource cache for field {} reloaded", this.field.getName());
   }
 
   private final float[] getCachedFloats(IndexReader reader) {

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Mon Dec  1 17:25:39 2014
@@ -49,7 +49,6 @@ import org.apache.solr.common.params.Com
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.StrUtils;
@@ -64,7 +63,6 @@ import org.apache.solr.request.SolrQuery
 import org.apache.solr.request.SolrQueryRequestBase;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.request.SolrRequestInfo;
-import org.apache.solr.response.BinaryQueryResponseWriter;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.response.QueryResponseWriterUtil;
 import org.apache.solr.response.SolrQueryResponse;
@@ -83,6 +81,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import java.io.ByteArrayInputStream;
+import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -203,15 +202,17 @@ public class SolrDispatchFilter extends 
   }
   
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain, boolean retry) throws IOException, ServletException {
-    if( abortErrorMessage != null ) {
-      ((HttpServletResponse)response).sendError( 500, abortErrorMessage );
+
+    if (abortErrorMessage != null) {
+      sendError((HttpServletResponse) response, 500, abortErrorMessage);
       return;
     }
-    
+
     if (this.cores == null) {
-      ((HttpServletResponse)response).sendError( 503, "Server is shutting down or failed to initialize" );
+      sendError((HttpServletResponse) response, 503, "Server is shutting down or failed to initialize");
       return;
     }
+
     CoreContainer cores = this.cores;
     SolrCore core = null;
     SolrQueryRequest solrReq = null;
@@ -298,7 +299,7 @@ public class SolrDispatchFilter extends 
         
         if (core == null && cores.isZooKeeperAware()) {
           // we couldn't find the core - lets make sure a collection was not specified instead
-          core = getCoreByCollection(cores, corename, path);
+          core = getCoreByCollection(cores, corename);
           
           if (core != null) {
             // we found a core, update the path
@@ -342,26 +343,31 @@ public class SolrDispatchFilter extends 
           // get or create/cache the parser for the core
           SolrRequestParsers parser = config.getRequestParsers();
 
-          // Handle /schema/* and /config/* paths via Restlet
-          if( path.equals("/schema") || path.startsWith("/schema/")
-              /*|| path.equals("/config") || path.startsWith("/config/")*/) {
-            solrReq = parser.parse(core, path, req);
-            SolrRequestInfo.setRequestInfo(new SolrRequestInfo(solrReq, new SolrQueryResponse()));
-            if( path.equals(req.getServletPath()) ) {
-              // avoid endless loop - pass through to Restlet via webapp
-              chain.doFilter(request, response);
-            } else {
-              // forward rewritten URI (without path prefix and core/collection name) to Restlet
-              req.getRequestDispatcher(path).forward(request, response);
-            }
-            return;
-          }
 
           // Determine the handler from the url path if not set
           // (we might already have selected the cores handler)
           if( handler == null && path.length() > 1 ) { // don't match "" or "/" as valid path
             handler = core.getRequestHandler( path );
+
+            if(handler == null){
+              //may be a restlet path
+              // Handle /schema/* paths via Restlet
+              if( path.equals("/schema") || path.startsWith("/schema/")) {
+                solrReq = parser.parse(core, path, req);
+                SolrRequestInfo.setRequestInfo(new SolrRequestInfo(solrReq, new SolrQueryResponse()));
+                if( path.equals(req.getServletPath()) ) {
+                  // avoid endless loop - pass through to Restlet via webapp
+                  chain.doFilter(request, response);
+                } else {
+                  // forward rewritten URI (without path prefix and core/collection name) to Restlet
+                  req.getRequestDispatcher(path).forward(request, response);
+                }
+                return;
+              }
+
+            }
             // no handler yet but allowed to handle select; let's check
+
             if( handler == null && parser.isHandleSelect() ) {
               if( "/select".equals( path ) || "/select/".equals( path ) ) {
                 solrReq = parser.parse( core, path, req );
@@ -520,7 +526,7 @@ public class SolrDispatchFilter extends 
       String queryString = req.getQueryString();
       
       urlstr += queryString == null ? "" : "?" + queryString;
-      
+
       URL url = new URL(urlstr);
       boolean isPostOrPutRequest = "POST".equals(req.getMethod()) || "PUT".equals(req.getMethod());
 
@@ -634,9 +640,7 @@ public class SolrDispatchFilter extends 
       boolean byCoreName, boolean activeReplicas) {
     String coreUrl;
     Set<String> liveNodes = clusterState.getLiveNodes();
-    Iterator<Slice> it = slices.iterator();
-    while (it.hasNext()) {
-      Slice slice = it.next();
+    for (Slice slice : slices) {
       Map<String,Replica> sliceShards = slice.getReplicasMap();
       for (ZkNodeProps nodeProps : sliceShards.values()) {
         ZkCoreNodeProps coreNodeProps = new ZkCoreNodeProps(nodeProps);
@@ -680,13 +684,12 @@ public class SolrDispatchFilter extends 
     }
     return slices;
   }
-  
-  private SolrCore getCoreByCollection(CoreContainer cores, String corename, String path) {
-    String collection = corename;
+
+  private SolrCore getCoreByCollection(CoreContainer cores, String corename) {
     ZkStateReader zkStateReader = cores.getZkController().getZkStateReader();
     
     ClusterState clusterState = zkStateReader.getClusterState();
-    Map<String,Slice> slices = clusterState.getActiveSlicesMap(collection);
+    Map<String,Slice> slices = clusterState.getActiveSlicesMap(corename);
     if (slices == null) {
       return null;
     }
@@ -696,9 +699,9 @@ public class SolrDispatchFilter extends 
     done:
     for (Entry<String,Slice> entry : entries) {
       // first see if we have the leader
-      ZkNodeProps leaderProps = clusterState.getLeader(collection, entry.getKey());
+      ZkNodeProps leaderProps = clusterState.getLeader(corename, entry.getKey());
       if (leaderProps != null) {
-        core = checkProps(cores, path, leaderProps);
+        core = checkProps(cores, leaderProps);
       }
       if (core != null) {
         break done;
@@ -709,7 +712,7 @@ public class SolrDispatchFilter extends 
       Set<Entry<String,Replica>> shardEntries = shards.entrySet();
       for (Entry<String,Replica> shardEntry : shardEntries) {
         Replica zkProps = shardEntry.getValue();
-        core = checkProps(cores, path, zkProps);
+        core = checkProps(cores, zkProps);
         if (core != null) {
           break done;
         }
@@ -718,8 +721,7 @@ public class SolrDispatchFilter extends 
     return core;
   }
 
-  private SolrCore checkProps(CoreContainer cores, String path,
-      ZkNodeProps zkProps) {
+  private SolrCore checkProps(CoreContainer cores, ZkNodeProps zkProps) {
     String corename;
     SolrCore core = null;
     if (cores.getZkController().getNodeName().equals(zkProps.getStr(ZkStateReader.NODE_NAME_PROP))) {
@@ -746,23 +748,27 @@ public class SolrDispatchFilter extends 
   private void writeResponse(SolrQueryResponse solrRsp, ServletResponse response,
                              QueryResponseWriter responseWriter, SolrQueryRequest solrReq, Method reqMethod)
           throws IOException {
+    try {
+      // Now write it out
+      final String ct = responseWriter.getContentType(solrReq, solrRsp);
+      // don't call setContentType on null
+      if (null != ct) response.setContentType(ct);
+
+      if (solrRsp.getException() != null) {
+        NamedList info = new SimpleOrderedMap();
+        int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, log);
+        solrRsp.add("error", info);
+        ((HttpServletResponse) response).setStatus(code);
+      }
 
-    // Now write it out
-    final String ct = responseWriter.getContentType(solrReq, solrRsp);
-    // don't call setContentType on null
-    if (null != ct) response.setContentType(ct); 
-
-    if (solrRsp.getException() != null) {
-      NamedList info = new SimpleOrderedMap();
-      int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, log);
-      solrRsp.add("error", info);
-      ((HttpServletResponse) response).setStatus(code);
+      if (Method.HEAD != reqMethod) {
+        QueryResponseWriterUtil.writeQueryResponse(response.getOutputStream(), responseWriter, solrReq, solrRsp, ct);
+      }
+      //else http HEAD request, nothing to write out, waited this long just to get ContentType
     }
-    
-    if (Method.HEAD != reqMethod) {
-      QueryResponseWriterUtil.writeQueryResponse(response.getOutputStream(), responseWriter, solrReq, solrRsp, ct);
+    catch (EOFException e) {
+      log.info("Unable to write response, client closed connection or we are shutting down", e);
     }
-    //else http HEAD request, nothing to write out, waited this long just to get ContentType
   }
   
   protected void execute( HttpServletRequest req, SolrRequestHandler handler, SolrQueryRequest sreq, SolrQueryResponse rsp) {
@@ -773,7 +779,16 @@ public class SolrDispatchFilter extends 
     sreq.getCore().execute( handler, sreq, rsp );
   }
 
-  protected void sendError(SolrCore core, 
+  private void sendError(HttpServletResponse response, int code, String message) throws IOException {
+    try {
+      response.sendError(code, message);
+    }
+    catch (EOFException e) {
+      log.info("Unable to write error response, client closed connection or we are shutting down", e);
+    }
+  }
+
+  protected void sendError(SolrCore core,
       SolrQueryRequest req, 
       ServletRequest request, 
       HttpServletResponse response, 
@@ -814,7 +829,7 @@ public class SolrDispatchFilter extends 
         if (exp != null) {
           SimpleOrderedMap info = new SimpleOrderedMap();
           int code = ResponseUtils.getErrorInfo(ex, info, log);
-          response.sendError(code, info.toString());
+          sendError(response, code, info.toString());
         }
       } finally {
         if (core == null && localCore != null) {

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Mon Dec  1 17:25:39 2014
@@ -53,6 +53,7 @@ import org.apache.solr.common.util.Conte
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.FastInputStream;
 import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.RequestHandlers;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
@@ -149,7 +150,7 @@ public class SolrRequestParsers 
 
     // Handlers and login will want to know the path. If it contains a ':'
     // the handler could use it for RESTful URLs
-    sreq.getContext().put( "path", path );
+    sreq.getContext().put( "path", RequestHandlers.normalize(path) );
     sreq.getContext().put("httpMethod", req.getMethod());
 
     if(addHttpRequestToContext) {

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java Mon Dec  1 17:25:39 2014
@@ -19,11 +19,15 @@ package org.apache.solr.spelling.suggest
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.suggest.Lookup;
 import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
 import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.schema.FieldType;
@@ -92,9 +96,26 @@ public class AnalyzingInfixLookupFactory
     : AnalyzingInfixSuggester.DEFAULT_MIN_PREFIX_CHARS;
 
     try {
-      return new AnalyzingInfixSuggester(core.getSolrConfig().luceneMatchVersion, 
-                                         FSDirectory.open(new File(indexPath).toPath()), indexAnalyzer,
-                                         queryAnalyzer, minPrefixChars, true);
+      return new AnalyzingInfixSuggester(FSDirectory.open(new File(indexPath).toPath()), indexAnalyzer,
+                                         queryAnalyzer, minPrefixChars, true) {
+        @Override
+        public List<LookupResult> lookup(CharSequence key, Set<BytesRef> contexts, int num, boolean allTermsRequired, boolean doHighlight) throws IOException {
+          List<LookupResult> res = super.lookup(key, contexts, num, allTermsRequired, doHighlight);
+          if (doHighlight) {
+            List<LookupResult> res2 = new ArrayList<>();
+            for(LookupResult hit : res) {
+              res2.add(new LookupResult(hit.highlightKey.toString(),
+                                        hit.highlightKey,
+                                        hit.value,
+                                        hit.payload,
+                                        hit.contexts));
+            }
+            res = res2;
+          }
+
+          return res;
+        }
+        };
     } catch (IOException e) {
       throw new RuntimeException();
     }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java Mon Dec  1 17:25:39 2014
@@ -19,13 +19,17 @@ package org.apache.solr.spelling.suggest
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.suggest.Lookup;
 import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
-import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester.BlenderType;
 import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester;
+import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester.BlenderType;
 import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.schema.FieldType;
@@ -97,10 +101,27 @@ public class BlendedInfixLookupFactory e
     : BlendedInfixSuggester.DEFAULT_NUM_FACTOR;
     
     try {
-      return new BlendedInfixSuggester(core.getSolrConfig().luceneMatchVersion, 
-                                       FSDirectory.open(new File(indexPath).toPath()),
+      return new BlendedInfixSuggester(FSDirectory.open(new File(indexPath).toPath()),
                                        indexAnalyzer, queryAnalyzer, minPrefixChars,
-                                       blenderType, numFactor, true);
+                                       blenderType, numFactor, true) {
+        @Override
+        public List<LookupResult> lookup(CharSequence key, Set<BytesRef> contexts, int num, boolean allTermsRequired, boolean doHighlight) throws IOException {
+          List<LookupResult> res = super.lookup(key, contexts, num, allTermsRequired, doHighlight);
+          if (doHighlight) {
+            List<LookupResult> res2 = new ArrayList<>();
+            for(LookupResult hit : res) {
+              res2.add(new LookupResult(hit.highlightKey.toString(),
+                                        hit.highlightKey,
+                                        hit.value,
+                                        hit.payload,
+                                        hit.contexts));
+            }
+            res = res2;
+          }
+
+          return res;
+        }
+      };
     } catch (IOException e) {
       throw new RuntimeException();
     }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java Mon Dec  1 17:25:39 2014
@@ -21,6 +21,7 @@ import java.util.concurrent.ArrayBlockin
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * @lucene.experimental
@@ -45,7 +46,14 @@ public class BufferStore implements Stor
 
   private final int bufferSize;
 
+  private final AtomicLong shardBuffercacheAllocate;
+  private final AtomicLong shardBuffercacheLost;
+
   public synchronized static void initNewBuffer(int bufferSize, long totalAmount) {
+    initNewBuffer(bufferSize, totalAmount, null);
+  }
+
+  public synchronized static void initNewBuffer(int bufferSize, long totalAmount, Metrics metrics) {
     if (totalAmount == 0) {
       return;
     }
@@ -55,13 +63,21 @@ public class BufferStore implements Stor
       if (count > Integer.MAX_VALUE) {
         count = Integer.MAX_VALUE;
       }
-      BufferStore store = new BufferStore(bufferSize, (int) count);
+      AtomicLong shardBuffercacheLost = new AtomicLong(0);
+      AtomicLong shardBuffercacheAllocate = new AtomicLong(0);
+      if (metrics != null) {
+        shardBuffercacheLost = metrics.shardBuffercacheLost;
+        shardBuffercacheAllocate = metrics.shardBuffercacheAllocate;
+      }
+      BufferStore store = new BufferStore(bufferSize, (int) count, shardBuffercacheAllocate, shardBuffercacheLost);
       bufferStores.put(bufferSize, store);
     }
   }
 
-  private BufferStore(int bufferSize, int count) {
+  private BufferStore(int bufferSize, int count, AtomicLong shardBuffercacheAllocate, AtomicLong shardBuffercacheLost) {
     this.bufferSize = bufferSize;
+    this.shardBuffercacheAllocate = shardBuffercacheAllocate;
+    this.shardBuffercacheLost = shardBuffercacheLost;
     buffers = setupBuffers(bufferSize, count);
   }
 
@@ -102,14 +118,17 @@ public class BufferStore implements Stor
     checkReturn(buffers.offer(buffer));
   }
 
-  private void checkReturn(boolean offer) {
-
+  private void checkReturn(boolean accepted) {
+    if (!accepted) {
+      shardBuffercacheLost.incrementAndGet();
+    }
   }
 
   private byte[] newBuffer(byte[] buf) {
     if (buf != null) {
       return buf;
     }
+    shardBuffercacheAllocate.incrementAndGet();
     return new byte[bufferSize];
   }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java Mon Dec  1 17:25:39 2014
@@ -49,9 +49,7 @@ public class Metrics implements Updater 
   public AtomicLong recordWrites = new AtomicLong(0);
   public AtomicLong queriesExternal = new AtomicLong(0);
   public AtomicLong queriesInternal = new AtomicLong(0);
-  public AtomicLong shardBuffercacheAllocate1024 = new AtomicLong(0);
-  public AtomicLong shardBuffercacheAllocate8192 = new AtomicLong(0);
-  public AtomicLong shardBuffercacheAllocateOther = new AtomicLong(0);
+  public AtomicLong shardBuffercacheAllocate = new AtomicLong(0);
   public AtomicLong shardBuffercacheLost = new AtomicLong(0);
   public Map<String,MethodCall> methodCalls = new ConcurrentHashMap<>();
   
@@ -101,6 +99,8 @@ public class Metrics implements Updater 
       metricsRecord.setMetric("record.writes", getPerSecond(recordWrites.getAndSet(0), seconds));
       metricsRecord.setMetric("query.external", getPerSecond(queriesExternal.getAndSet(0), seconds));
       metricsRecord.setMetric("query.internal", getPerSecond(queriesInternal.getAndSet(0), seconds));
+      metricsRecord.setMetric("buffercache.allocations", getPerSecond(shardBuffercacheAllocate.getAndSet(0), seconds));
+      metricsRecord.setMetric("buffercache.lost", getPerSecond(shardBuffercacheLost.getAndSet(0), seconds));
       for (Entry<String,MethodCall> entry : methodCalls.entrySet()) {
         String key = entry.getKey();
         MethodCall value = entry.getValue();

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Mon Dec  1 17:25:39 2014
@@ -165,7 +165,7 @@ public class DirectUpdateHandler2 extend
     } catch (SolrException e) {
       throw e;
     } catch (RuntimeException t) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
           String.format(Locale.ROOT, "Exception writing document id %s to the index; possible analysis error.",
           cmd.getPrintableId()), t);
     }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Mon Dec  1 17:25:39 2014
@@ -47,6 +47,7 @@ import org.apache.solr.cloud.Distributed
 import org.apache.solr.cloud.LeaderInitiatedRecoveryThread;
 import org.apache.solr.cloud.Overseer;
 import org.apache.solr.cloud.ZkController;
+import org.apache.solr.cloud.overseer.OverseerAction;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.SolrInputDocument;
@@ -77,7 +78,6 @@ import org.apache.solr.request.SolrReque
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
-import org.apache.solr.schema.TrieDateField;
 import org.apache.solr.update.AddUpdateCommand;
 import org.apache.solr.update.CommitUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
@@ -542,7 +542,7 @@ public class DistributedUpdateProcessor 
                   if (ruleExpiryLock.tryLock(10, TimeUnit.MILLISECONDS)) {
                     log.info("Going to expire routing rule");
                     try {
-                      Map<String, Object> map = ZkNodeProps.makeMap(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.REMOVEROUTINGRULE.toLower(),
+                      Map<String, Object> map = ZkNodeProps.makeMap(Overseer.QUEUE_OPERATION, OverseerAction.REMOVEROUTINGRULE.toLower(),
                           ZkStateReader.COLLECTION_PROP, collection,
                           ZkStateReader.SHARD_ID_PROP, myShardId,
                           "routeKey", routeKey + "!");

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java Mon Dec  1 17:25:39 2014
@@ -59,8 +59,9 @@ public final class MaxFieldValueUpdatePr
   public Collection pickSubset(Collection values) {
     Collection result = values;
     try {
-      result = Collections.singletonList
-        (Collections.max(values));
+      // NOTE: the extra cast to Object is needed to prevent compile
+      // errors on Eclipse Compiler (ecj) used for javadoc lint
+      result = Collections.singletonList((Object) Collections.max(values));
     } catch (ClassCastException e) {
       throw new SolrException
         (BAD_REQUEST, 

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java Mon Dec  1 17:25:39 2014
@@ -59,8 +59,9 @@ public final class MinFieldValueUpdatePr
   public Collection pickSubset(Collection values) {
     Collection result = values;
     try {
-      result = Collections.singletonList
-        (Collections.min(values));
+      // NOTE: the extra cast to Object is needed to prevent compile
+      // errors on Eclipse Compiler (ecj) used for javadoc lint
+      result = Collections.singletonList((Object) Collections.min(values));
     } catch (ClassCastException e) {
       throw new SolrException
         (BAD_REQUEST, 

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java Mon Dec  1 17:25:39 2014
@@ -210,5 +210,19 @@ public  class CommandOperation {
     }
 
   }
+  public CommandOperation getCopy(){
+    return new CommandOperation(name,commandData);
+  }
+
+  public Map getMap(String key, Map def) {
+    Object o =getMapVal(key);
+    if(o==null) return def;
+    if ( !(o instanceof Map)) {
+      addError(MessageFormat.format("''{0}'' must be a map", key));
+      return def;
+    } else {
+      return (Map) o;
 
+    }
+  }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java Mon Dec  1 17:25:39 2014
@@ -43,6 +43,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.apache.commons.io.FileUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.NoHttpResponseException;
@@ -54,7 +55,6 @@ import org.apache.http.client.ResponseHa
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.util.EntityUtils;
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
@@ -204,6 +204,8 @@ public class SolrCLI {
       return new ApiTool();
     else if ("create_collection".equals(toolType))
       return new CreateCollectionTool();
+    else if ("create_core".equals(toolType))
+      return new CreateCoreTool();
 
     // If you add a built-in tool to this class, add it here to avoid
     // classpath scanning
@@ -223,6 +225,7 @@ public class SolrCLI {
     formatter.printHelp("status", getToolOptions(new StatusTool()));
     formatter.printHelp("api", getToolOptions(new ApiTool()));
     formatter.printHelp("create_collection", getToolOptions(new CreateCollectionTool()));
+    formatter.printHelp("create_core", getToolOptions(new CreateCoreTool()));
 
     List<Class<Tool>> toolClasses = findToolClassesInPackage("org.apache.solr.util");
     for (Class<Tool> next : toolClasses) {
@@ -701,13 +704,13 @@ public class SolrCLI {
     }    
   } // end ApiTool class
 
+  private static final String DEFAULT_CONFIG_SET = "data_driven_schema_configs";
+
   /**
    * Supports create_collection command in the bin/solr script.
    */
   public static class CreateCollectionTool implements Tool {
 
-    private static final String DEFAULT_CONFIG_SET = "data_driven_schema_configs";
-
     @Override
     public String getName() {
       return "create_collection";
@@ -796,8 +799,12 @@ public class SolrCLI {
           Map<String,Object> status = statusTool.reportStatus(solrUrl, systemInfo, httpClient);
 
           Map<String,Object> cloud = (Map<String, Object>)status.get("cloud");
-          if (cloud == null)
-            throw new IllegalArgumentException("Solr server at "+solrUrl+" not running in SolrCloud mode!");
+          if (cloud == null) {
+            System.err.println("\nERROR: Solr at "+solrUrl+
+                " is running in standalone server mode, please use the create_core command instead;\n" +
+                "create_collection can only be used when running in SolrCloud mode.\n");
+            return 1;
+          }
 
           String zookeeper = (String) cloud.get("ZooKeeper");
           if (zookeeper.endsWith("(embedded)")) {
@@ -869,7 +876,7 @@ public class SolrCLI {
       String collectionName = cli.getOptionValue("name");
       String createCollectionUrl =
           String.format(Locale.ROOT,
-              "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d&maxShardsPerNode=%d&configSet=%s",
+              "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d&maxShardsPerNode=%d&collection.configName=%s",
               baseUrl,
               collectionName,
               numShards,
@@ -883,6 +890,7 @@ public class SolrCLI {
       CharArr arr = new CharArr();
       new JSONWriter(arr, 2).write(json);
       System.out.println(arr.toString());
+      System.out.println();
     }
 
     protected int optionAsInt(CommandLine cli, String option, int defaultVal) {
@@ -1164,5 +1172,112 @@ public class SolrCLI {
       new JSONWriter(arr, 2).write(report);
       System.out.println(arr.toString());
     }
-  } // end HealthcheckTool  
+  } // end HealthcheckTool
+
+  public static class CreateCoreTool implements Tool {
+
+    @Override
+    public String getName() {
+      return "create_core";
+    }
+
+    @SuppressWarnings("static-access")
+    @Override
+    public Option[] getOptions() {
+      return new Option[] {
+          OptionBuilder
+              .withArgName("URL")
+              .hasArg()
+              .isRequired(false)
+              .withDescription("Base Solr URL, default is http://localhost:8983/solr")
+              .create("solrUrl"),
+          OptionBuilder
+              .withArgName("NAME")
+              .hasArg()
+              .isRequired(true)
+              .withDescription("Name of the core to create.")
+              .create("name"),
+          OptionBuilder
+              .withArgName("CONFIG")
+              .hasArg()
+              .isRequired(false)
+              .withDescription("Name of the configuration for this core; default is "+DEFAULT_CONFIG_SET)
+              .create("config"),
+          OptionBuilder
+              .withArgName("DIR")
+              .hasArg()
+              .isRequired(true)
+              .withDescription("Path to configsets directory on the local system.")
+              .create("configsetsDir")
+      };
+    }
+
+    @Override
+    public int runTool(CommandLine cli) throws Exception {
+
+      String solrUrl = cli.getOptionValue("solrUrl", "http://localhost:8983/solr");
+      if (!solrUrl.endsWith("/"))
+        solrUrl += "/";
+
+      File configsetsDir = new File(cli.getOptionValue("configsetsDir"));
+      if (!configsetsDir.isDirectory())
+        throw new FileNotFoundException(configsetsDir.getAbsolutePath()+" not found!");
+
+      String configSet = cli.getOptionValue("config", DEFAULT_CONFIG_SET);
+      File configSetDir = new File(configsetsDir, configSet);
+      if (!configSetDir.isDirectory())
+        throw new FileNotFoundException("Specified config "+configSet+
+            " not found in "+configsetsDir.getAbsolutePath());
+
+      File confDir = new File(configSetDir,"conf");
+
+      String coreName = cli.getOptionValue("name");
+
+      String systemInfoUrl = solrUrl+"admin/info/system";
+      HttpClient httpClient = getHttpClient();
+      String solrHome = null;
+      try {
+        Map<String,Object> systemInfo = getJson(httpClient, systemInfoUrl, 2);
+        if ("solrcloud".equals(systemInfo.get("mode"))) {
+          System.err.println("\nERROR: Solr at "+solrUrl+
+              " is running in SolrCloud mode, please use create_collection command instead.\n");
+          return 1;
+        }
+
+        // convert raw JSON into user-friendly output
+        solrHome = (String)systemInfo.get("solr_home");
+        if (solrHome == null) {
+          solrHome = configsetsDir.getParentFile().getAbsolutePath();
+        }
+      } finally {
+        closeHttpClient(httpClient);
+      }
+
+      File coreInstanceDir = new File(solrHome, coreName);
+      if (!coreInstanceDir.isDirectory()) {
+        coreInstanceDir.mkdirs();
+        if (!coreInstanceDir.isDirectory())
+          throw new IOException("Failed to create new core instance directory: "+coreInstanceDir.getAbsolutePath());
+      }
+
+      FileUtils.copyDirectoryToDirectory(confDir, coreInstanceDir);
+
+      String createCoreUrl =
+          String.format(Locale.ROOT,
+              "%sadmin/cores?action=CREATE&name=%s&instanceDir=%s",
+              solrUrl,
+              coreName,
+              coreName);
+
+      System.out.println("Creating new core '"+coreName+"' using command:\n\n"+createCoreUrl+"\n");
+
+      Map<String,Object> json = getJson(createCoreUrl);
+      CharArr arr = new CharArr();
+      new JSONWriter(arr, 2).write(json);
+      System.out.println(arr.toString());
+      System.out.println();
+
+      return 0;
+    }
+  } // end CreateCoreTool class
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml Mon Dec  1 17:25:39 2014
@@ -201,9 +201,10 @@ NOTE: Tests expect every field in this s
     <fieldtype name="str_dv_last" class="solr.StrField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
     <fieldtype name="str_dv_first" class="solr.StrField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
 
-    <fieldtype name="bin" class="solr.SortableBinaryField" stored="true" indexed="true" />
-    <fieldtype name="bin_last" class="solr.SortableBinaryField" stored="true" indexed="true" sortMissingLast="true"/>
-    <fieldtype name="bin_first" class="solr.SortableBinaryField" stored="true" indexed="true" sortMissingFirst="true"/>
+    <!-- note: all 'binary' fields have docvalues, because this fieldtype doesnt support indexing -->
+    <fieldtype name="bin" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true"/>
+    <fieldtype name="bin_last" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true" sortMissingLast="true"/>
+    <fieldtype name="bin_first" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true" sortMissingFirst="true"/>
     <fieldtype name="bin_dv" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true"/>
     <fieldtype name="bin_dv_last" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
     <fieldtype name="bin_dv_first" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml Mon Dec  1 17:25:39 2014
@@ -65,6 +65,8 @@
     <field name="pointvector" type="pointvector" />
     <field name="bbox" type="bbox" />
 
+    <dynamicField name="bboxD_*" type="bbox" indexed="true" />
+
   </fields>
 
   <uniqueKey>id</uniqueKey>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml Mon Dec  1 17:25:39 2014
@@ -219,7 +219,7 @@
              See the Java Regular Expression documentation for more
              infomation on pattern and replacement string syntax.
 
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml Mon Dec  1 17:25:39 2014
@@ -214,7 +214,7 @@
              See the Java Regular Expression documentation for more
              infomation on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"
@@ -330,6 +330,7 @@ valued. -->
         Longer patterns will be matched first.  if equal size patterns
         both match, the first appearing in the schema will be used.  -->
    <dynamicField name="*_s"  	type="string"  indexed="true"  stored="true"/>
+   <dynamicField name="*_s_dv"  type="string"  indexed="true"  stored="true" docValues="true"/>
    <dynamicField name="*_ss"  	type="string"  indexed="true"  stored="true" multiValued="true"/>
    <dynamicField name="*_sS" 	type="string"  indexed="false" stored="true"/>
    <dynamicField name="*_i"  	type="int"    indexed="true"  stored="true"/>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml Mon Dec  1 17:25:39 2014
@@ -185,7 +185,6 @@
   <queryResponseWriter name="xml" default="true"
                        class="solr.XMLResponseWriter" />
 
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
 
   <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
 If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
@@ -201,11 +200,6 @@ based HashBitset. -->
     <bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
 
   <requestHandler name="dismax" class="solr.SearchHandler" >
     <lst name="defaults">
@@ -230,8 +224,6 @@ based HashBitset. -->
 
   <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
   <!-- test query parameter defaults -->
   <requestHandler name="defaults" class="solr.StandardRequestHandler">
     <lst name="defaults">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml Mon Dec  1 17:25:39 2014
@@ -185,8 +185,6 @@
   <queryResponseWriter name="xml" default="true"
                        class="solr.XMLResponseWriter" />
 
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
   <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
 If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
 based HashBitset. -->
@@ -201,12 +199,6 @@ based HashBitset. -->
     <bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-
   <requestHandler name="dismax" class="solr.SearchHandler" >
     <lst name="defaults">
       <str name="defType">dismax</str>
@@ -230,8 +222,6 @@ based HashBitset. -->
 
   <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
   <!-- test query parameter defaults -->
   <requestHandler name="defaults" class="solr.StandardRequestHandler">
     <lst name="defaults">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml Mon Dec  1 17:25:39 2014
@@ -50,8 +50,6 @@
     </arr>
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <!-- enable streaming for testing... -->
   <requestDispatcher handleSelect="true" >
     <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml Mon Dec  1 17:25:39 2014
@@ -45,15 +45,6 @@
     <useFilterForSortedQuery>${solr.test.useFilterForSortedQuery}</useFilterForSortedQuery>
   </query>
 
-
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
   <requestHandler name="/select" class="solr.SearchHandler" default="true" />
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-  <requestHandler name="/admin/" class="solr.admin.AdminHandlers"  />
 </config>
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml Mon Dec  1 17:25:39 2014
@@ -38,15 +38,7 @@
     </updateLog>
   </updateHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
   <requestHandler name="/select" class="solr.SearchHandler" default="true" />
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-  <requestHandler name="/admin/" class="solr.admin.AdminHandlers"  />
 
   <updateRequestProcessorChain name="convert-ttl-defaults">
     <processor class="solr.processor.DocExpirationUpdateProcessorFactory">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-externalversionconstraint.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-externalversionconstraint.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
Binary files - no diff available.

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml Mon Dec  1 17:25:39 2014
@@ -48,8 +48,6 @@
 
   </query>
 
-  <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
-
   <requestDispatcher handleSelect="false">
     <httpCaching never304="true"/>
   </requestDispatcher>
@@ -66,8 +64,6 @@
     </lst>
 
   </requestHandler>
-  <requestHandler name="/update" class="solr.UpdateRequestHandler">
-  </requestHandler>
 
   <queryResponseWriter name="json" class="solr.JSONResponseWriter">
     <!-- For the purposes of the tutorial, JSON responses are written as

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml Mon Dec  1 17:25:39 2014
@@ -39,14 +39,6 @@
     <bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"/>
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
 
   <requestHandler name="/dump" class="DumpRequestHandler" initParams="a">
     <lst name="defaults">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml Mon Dec  1 17:25:39 2014
@@ -55,8 +55,6 @@
     </lst>
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <!-- enable streaming for testing... -->
   <requestDispatcher handleSelect="true">
     <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml Mon Dec  1 17:25:39 2014
@@ -36,7 +36,6 @@
     <str name="maxNumberOfBackups">1</str>
   </requestHandler>
   
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
 
   <!-- enable streaming for testing... -->
   <requestDispatcher handleSelect="true">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml Mon Dec  1 17:25:39 2014
@@ -56,8 +56,6 @@
     </lst>
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <!-- enable streaming for testing... -->
   <requestDispatcher handleSelect="true">
     <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml Mon Dec  1 17:25:39 2014
@@ -54,8 +54,5 @@
 
   </requestHandler>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
 </config>
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml Mon Dec  1 17:25:39 2014
@@ -185,8 +185,6 @@
   <queryResponseWriter name="xml" default="true"
                        class="solr.XMLResponseWriter" />
 
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
   <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
 If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
 based HashBitset. -->
@@ -201,11 +199,6 @@ based HashBitset. -->
     <bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
 
   <requestHandler name="dismax" class="solr.SearchHandler" >
     <lst name="defaults">
@@ -230,8 +223,6 @@ based HashBitset. -->
 
   <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
   <!-- test query parameter defaults -->
   <requestHandler name="defaults" class="solr.StandardRequestHandler">
     <lst name="defaults">
@@ -250,8 +241,6 @@ based HashBitset. -->
     </lst>
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
     <!-- This is slightly different from the field value so we can test dealing with token offset changes -->
     <str name="queryAnalyzerFieldType">lowerpunctfilt</str>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml Mon Dec  1 17:25:39 2014
@@ -40,8 +40,6 @@
   <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <requestHandler name="/replication" class="solr.ReplicationHandler">
     <lst name="master">
       <str name="replicateAfter">commit</str>