You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ma...@apache.org on 2010/01/12 16:59:08 UTC

svn commit: r898393 [2/3] - in /lucene/solr/branches/cloud: ./ client/ruby/solr-ruby/solr/conf/ client/ruby/solr-ruby/test/conf/ contrib/clustering/ contrib/clustering/lib/ contrib/clustering/src/main/java/org/apache/solr/handler/clustering/carrot2/ co...

Modified: lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/contrib/velocity/src/main/solr/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -743,23 +743,23 @@
     in the request. XMLResponseWriter will be used if nothing is specified here.
     The json, python, and ruby writers are also available by default.
 
-    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
-    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
-    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
-    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
-    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
-    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+    <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
 
     <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
   -->
 
-  <queryResponseWriter name="velocity" class="org.apache.solr.request.VelocityResponseWriter"/>
+  <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"/>
 
   <!-- XSLT response writer transforms the XML output by any xslt file found
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
        every xsltCacheLifetimeSeconds.  
    -->
-  <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
   </queryResponseWriter>
 

Modified: lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/db/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -674,12 +674,12 @@
     in the request. XMLResponseWriter will be used if nothing is specified here.
     The json, python, and ruby writers are also available by default.
 
-    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
-    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
-    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
-    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
-    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
-    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+    <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
 
     <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
   -->
@@ -688,7 +688,7 @@
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
        every xsltCacheLifetimeSeconds.  
    -->
-  <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
   </queryResponseWriter> 
     

Modified: lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/mail/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -768,12 +768,12 @@
     in the request. XMLResponseWriter will be used if nothing is specified here.
     The json, python, and ruby writers are also available by default.
 
-    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
-    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
-    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
-    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
-    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
-    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+    <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
 
     <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
   -->
@@ -782,7 +782,7 @@
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
        every xsltCacheLifetimeSeconds.
    -->
-  <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
   </queryResponseWriter>
 

Modified: lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/example-DIH/solr/rss/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -673,12 +673,12 @@
     in the request. XMLResponseWriter will be used if nothing is specified here.
     The json, python, and ruby writers are also available by default.
 
-    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
-    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
-    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
-    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
-    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
-    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+    <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
 
     <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
   -->
@@ -687,7 +687,7 @@
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
        every xsltCacheLifetimeSeconds.  
    -->
-  <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
   </queryResponseWriter> 
     

Modified: lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml (original)
+++ lucene/solr/branches/cloud/example/solr/conf/solrconfig.xml Tue Jan 12 15:59:01 2010
@@ -957,6 +957,12 @@
      <str name="hl.simple.post"><![CDATA[</em>]]></str>
     </lst>
    </formatter>
+
+   <!-- Configure the standard fragListBuilder -->
+   <fragListBuilder name="simple" class="org.apache.solr.highlight.SimpleFragListBuilder" default="true"/>
+
+   <!-- multi-colored tag FragmentsBuilder -->
+   <fragmentsBuilder name="colored" class="org.apache.solr.highlight.MultiColoredScoreOrderFragmentsBuilder" default="true"/>
   </highlighting>
 
   <!-- An example dedup update processor that creates the "id" field on the fly
@@ -995,12 +1001,12 @@
        The following response writers are implicitly configured unless
        overridden...
 
-    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
-    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
-    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
-    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
-    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
-    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+    <queryResponseWriter name="xml" class="solr.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
 
       Custom response writers can be declared as needed...
     
@@ -1011,7 +1017,7 @@
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
        every xsltCacheLifetimeSeconds.  
    -->
-  <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
+  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
   </queryResponseWriter>
 

Modified: lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java (original)
+++ lucene/solr/branches/cloud/src/common/org/apache/solr/common/params/HighlightParams.java Tue Jan 12 15:59:01 2010
@@ -30,6 +30,8 @@
   public static final String MAX_CHARS   = HIGHLIGHT+".maxAnalyzedChars";
   public static final String FORMATTER   = HIGHLIGHT+".formatter";
   public static final String FRAGMENTER  = HIGHLIGHT+".fragmenter";
+  public static final String FRAG_LIST_BUILDER = HIGHLIGHT+".fragListBuilder";
+  public static final String FRAGMENTS_BUILDER = HIGHLIGHT+".fragmentsBuilder";
   public static final String FIELD_MATCH = HIGHLIGHT+".requireFieldMatch";
   public static final String ALTERNATE_FIELD = HIGHLIGHT+".alternateField";
   public static final String ALTERNATE_FIELD_LENGTH = HIGHLIGHT+".maxAlternateFieldLength";
@@ -38,6 +40,9 @@
   public static final String HIGHLIGHT_MULTI_TERM = HIGHLIGHT+".highlightMultiTerm";
 
   public static final String MERGE_CONTIGUOUS_FRAGMENTS = HIGHLIGHT + ".mergeContiguous";
+
+  public static final String USE_HIGHLIGHTER = HIGHLIGHT + ".useHighlighter";
+  
   // Formatter
   public static final String SIMPLE = "simple";
   public static final String SIMPLE_PRE  = HIGHLIGHT+"."+SIMPLE+".pre";

Modified: lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java (original)
+++ lucene/solr/branches/cloud/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java Tue Jan 12 15:59:01 2010
@@ -397,9 +397,9 @@
    * @return a LinkedHashMap containing 'n' or less than 'n' entries
    */
   public Map<K, V> getOldestAccessedItems(int n) {
-    markAndSweepLock.lock();
     Map<K, V> result = new LinkedHashMap<K, V>();
     TreeSet<CacheEntry> tree = new TreeSet<CacheEntry>();
+    markAndSweepLock.lock();
     try {
       for (Map.Entry<Object, CacheEntry<K,V>> entry : map.entrySet()) {
         CacheEntry ce = entry.getValue();
@@ -423,10 +423,10 @@
   }
 
   public Map<K,V> getLatestAccessedItems(int n) {
-    // we need to grab the lock since we are changing lastAccessedCopy
-    markAndSweepLock.lock();
     Map<K,V> result = new LinkedHashMap<K,V>();
     TreeSet<CacheEntry> tree = new TreeSet<CacheEntry>();
+    // we need to grab the lock since we are changing lastAccessedCopy
+    markAndSweepLock.lock();
     try {
       for (Map.Entry<Object, CacheEntry<K,V>> entry : map.entrySet()) {
         CacheEntry<K,V> ce = entry.getValue();

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilter.java Tue Jan 12 15:59:01 2010
@@ -63,24 +63,24 @@
   private String replaceBlockBuffer;
   private int replaceBlockBufferOffset;
   
-  public PatternReplaceCharFilter( String pattern, String replacement, CharStream in ){
+  public PatternReplaceCharFilter( Pattern pattern, String replacement, CharStream in ){
     this( pattern, replacement, DEFAULT_MAX_BLOCK_CHARS, null, in );
   }
 
-  public PatternReplaceCharFilter( String pattern, String replacement,
+  public PatternReplaceCharFilter( Pattern pattern, String replacement,
       int maxBlockChars, CharStream in ){
     this( pattern, replacement, maxBlockChars, null, in );
   }
 
-  public PatternReplaceCharFilter( String pattern, String replacement,
+  public PatternReplaceCharFilter( Pattern pattern, String replacement,
       String blockDelimiters, CharStream in ){
     this( pattern, replacement, DEFAULT_MAX_BLOCK_CHARS, blockDelimiters, in );
   }
 
-  public PatternReplaceCharFilter( String pattern, String replacement,
+  public PatternReplaceCharFilter( Pattern pattern, String replacement,
       int maxBlockChars, String blockDelimiters, CharStream in ){
     super( in );
-    this.pattern = Pattern.compile( pattern );
+    this.pattern = pattern;
     this.replacement = replacement;
     if( maxBlockChars < 1 )
       throw new IllegalArgumentException( "maxBlockChars should be greater than 0, but it is " + maxBlockChars );

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java Tue Jan 12 15:59:01 2010
@@ -18,6 +18,8 @@
 package org.apache.solr.analysis;
 
 import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import org.apache.lucene.analysis.CharStream;
 
@@ -28,16 +30,20 @@
  */
 public class PatternReplaceCharFilterFactory extends BaseCharFilterFactory {
   
-  private String pattern;
+  private Pattern p;
   private String replacement;
   private int maxBlockChars;
   private String blockDelimiters;
 
   public void init(Map<String, String> args) {
     super.init( args );
-    pattern = args.get( "pattern" );
-    if( pattern == null )
-      pattern = "";
+    try {
+      p = Pattern.compile(args.get("pattern"));
+    } catch (PatternSyntaxException e) {
+      throw new RuntimeException
+        ("Configuration Error: 'pattern' can not be parsed in " +
+         this.getClass().getName(), e);
+    }
     replacement = args.get( "replacement" );
     if( replacement == null )
       replacement = "";
@@ -46,6 +52,6 @@
   }
 
   public CharStream create(CharStream input) {
-    return new PatternReplaceCharFilter( pattern, replacement, maxBlockChars, blockDelimiters, input );
+    return new PatternReplaceCharFilter( p, replacement, maxBlockChars, blockDelimiters, input );
   }
 }

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/CloseHook.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/DirectoryFactory.java
            ('svn:executable' removed)

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/JmxMonitoredMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java Tue Jan 12 15:59:01 2010
@@ -1,105 +1,107 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.core;
-
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.DOMUtil;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import java.util.*;
-import static java.util.Collections.unmodifiableList;
-import static java.util.Collections.unmodifiableMap;
-
-/**
- * An Object which represents a Plugin of any type 
- * @version $Id$
- */
-public class PluginInfo {
-  public final String name, className, type;
-  public final NamedList initArgs;
-  public final Map<String, String> attributes;
-  public final List<PluginInfo> children;
-
-  public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
-    this.type = type;
-    this.name = attrs.get("name");
-    this.className = attrs.get("class");
-    this.initArgs = initArgs;
-    attributes = unmodifiableMap(attrs);
-    this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
-  }
-
-
-  public PluginInfo(Node node, String err, boolean requireName, boolean requireClass) {
-    type = node.getNodeName();
-    name = DOMUtil.getAttr(node, "name", requireName ? err : null);
-    className = DOMUtil.getAttr(node, "class", requireClass ? err : null);
-    initArgs = DOMUtil.childNodesToNamedList(node);
-    attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
-    children = loadSubPlugins(node);
-  }
-
-  private List<PluginInfo> loadSubPlugins(Node node) {
-    List<PluginInfo> children = null;
-    try {
-      //if there is another sub tag with a 'class' attribute that has to be another plugin
-      NodeList nodes = (NodeList) Config.xpathFactory.newXPath().evaluate("*[@class]",node, XPathConstants.NODESET);
-      if(nodes.getLength() > 0){
-        children = new ArrayList<PluginInfo>(nodes.getLength());
-        for (int i=0; i<nodes.getLength(); i++) {
-          PluginInfo pluginInfo = new PluginInfo(nodes.item(i), null, false, false);
-          if (pluginInfo.isEnabled()) children.add(pluginInfo);
-        }
-      }
-    } catch (XPathExpressionException e) { }
-    return children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder("{");
-    if (type != null) sb.append("type = " + type + ",");
-    if (name != null) sb.append("name = " + name + ",");
-    if (className != null) sb.append("class = " + className + ",");
-    if (initArgs.size() > 0) sb.append("args = " + initArgs);
-    sb.append("}");
-    return sb.toString();
-  }
-
-  public boolean isEnabled(){
-    String enable = attributes.get("enable");
-    return enable == null || Boolean.parseBoolean(enable); 
-  }
-
-  public boolean isDefault() {
-    return Boolean.parseBoolean(attributes.get("default"));
-  }
-
-  /**Filter children by type
-   * @param type The type name. must not be null
-   * @return The mathcing children
-   */
-  public List<PluginInfo> getChildren(String type){
-    if(children.isEmpty()) return children;
-    List<PluginInfo> result = new ArrayList<PluginInfo>();
-    for (PluginInfo child : children) if(type.equals(child.type)) result.add(child);
-    return result;
-  }
-}
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.core;
+
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.DOMUtil;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.*;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
+
+/**
+ * An Object which represents a Plugin of any type 
+ * @version $Id$
+ */
+public class PluginInfo {
+  public final String name, className, type;
+  public final NamedList initArgs;
+  public final Map<String, String> attributes;
+  public final List<PluginInfo> children;
+
+  public PluginInfo(String type, Map<String, String> attrs ,NamedList initArgs, List<PluginInfo> children) {
+    this.type = type;
+    this.name = attrs.get("name");
+    this.className = attrs.get("class");
+    this.initArgs = initArgs;
+    attributes = unmodifiableMap(attrs);
+    this.children = children == null ? Collections.<PluginInfo>emptyList(): unmodifiableList(children);
+  }
+
+
+  public PluginInfo(Node node, String err, boolean requireName, boolean requireClass) {
+    type = node.getNodeName();
+    name = DOMUtil.getAttr(node, "name", requireName ? err : null);
+    className = DOMUtil.getAttr(node, "class", requireClass ? err : null);
+    initArgs = DOMUtil.childNodesToNamedList(node);
+    attributes = unmodifiableMap(DOMUtil.toMap(node.getAttributes()));
+    children = loadSubPlugins(node);
+  }
+
+  private List<PluginInfo> loadSubPlugins(Node node) {
+    List<PluginInfo> children = new ArrayList<PluginInfo>();
+    //if there is another sub tag with a non namedlist tag that has to be another plugin
+    NodeList nlst = node.getChildNodes();
+    for (int i = 0; i < nlst.getLength(); i++) {
+      Node nd = nlst.item(i);
+      if (nd.getNodeType() != Node.ELEMENT_NODE) continue;
+      if (NL_TAGS.contains(nd.getNodeName())) continue;
+      PluginInfo pluginInfo = new PluginInfo(nd, null, false, false);
+      if (pluginInfo.isEnabled()) children.add(pluginInfo);
+    }
+    return children.isEmpty() ? Collections.<PluginInfo>emptyList() : unmodifiableList(children);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("{");
+    if (type != null) sb.append("type = " + type + ",");
+    if (name != null) sb.append("name = " + name + ",");
+    if (className != null) sb.append("class = " + className + ",");
+    if (initArgs.size() > 0) sb.append("args = " + initArgs);
+    sb.append("}");
+    return sb.toString();
+  }
+
+  public boolean isEnabled(){
+    String enable = attributes.get("enable");
+    return enable == null || Boolean.parseBoolean(enable); 
+  }
+
+  public boolean isDefault() {
+    return Boolean.parseBoolean(attributes.get("default"));
+  }
+
+  public PluginInfo getChild(String type){
+    List<PluginInfo> l = getChildren(type);
+    return  l.isEmpty() ? null:l.get(0);
+  }
+
+  /**Filter children by type
+   * @param type The type name. must not be null
+   * @return The mathcing children
+   */
+  public List<PluginInfo> getChildren(String type){
+    if(children.isEmpty()) return children;
+    List<PluginInfo> result = new ArrayList<PluginInfo>();
+    for (PluginInfo child : children) if(type.equals(child.type)) result.add(child);
+    return result;
+  }
+  private static final HashSet<String> NL_TAGS = new HashSet<String>(Arrays.asList("lst","str","int","bool","arr","float","double"));
+}

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/PluginInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/QuerySenderListener.java Tue Jan 12 15:59:01 2010
@@ -23,7 +23,7 @@
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.LocalSolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 import java.util.List;
 

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/RequestHandlers.java Tue Jan 12 15:59:01 2010
@@ -21,8 +21,8 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.util.plugin.SolrCoreAware;
 import org.apache.solr.util.plugin.PluginInfoInitialized;
 import org.slf4j.Logger;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrConfig.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
-import org.apache.solr.request.QueryResponseWriter;
+import org.apache.solr.response.QueryResponseWriter;
 
 import org.apache.solr.search.CacheConfig;
 import org.apache.solr.search.FastLRUCache;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrCore.java Tue Jan 12 15:59:01 2010
@@ -34,6 +34,16 @@
 import org.apache.solr.highlight.DefaultSolrHighlighter;
 import org.apache.solr.highlight.SolrHighlighter;
 import org.apache.solr.request.*;
+import org.apache.solr.response.BinaryResponseWriter;
+import org.apache.solr.response.JSONResponseWriter;
+import org.apache.solr.response.PHPResponseWriter;
+import org.apache.solr.response.PHPSerializedResponseWriter;
+import org.apache.solr.response.PythonResponseWriter;
+import org.apache.solr.response.QueryResponseWriter;
+import org.apache.solr.response.RawResponseWriter;
+import org.apache.solr.response.RubyResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.response.XMLResponseWriter;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.search.QParserPlugin;
 import org.apache.solr.search.SolrFieldCacheMBean;
@@ -584,7 +594,7 @@
     reqHandlers = new RequestHandlers(this);
     reqHandlers.initHandlersFromConfig( solrConfig );
 
-    highlighter = initHighLighter();
+    highlighter = initHighlighter();
 
     // Handle things that should eventually go away
     initDeprecatedSupport();
@@ -634,7 +644,7 @@
     resourceLoader.inform(infoRegistry);
   }
 
-  private SolrHighlighter initHighLighter() {
+  private SolrHighlighter initHighlighter() {
     SolrHighlighter highlighter = null;
     PluginInfo pluginInfo = solrConfig.getPluginInfo(SolrHighlighter.class.getName());
     if(pluginInfo != null){

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/core/SolrResourceLoader.java Tue Jan 12 15:59:01 2010
@@ -47,8 +47,8 @@
 import org.apache.solr.common.ResourceLoader;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.handler.component.SearchComponent;
-import org.apache.solr.request.QueryResponseWriter;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
 import org.apache.solr.util.plugin.ResourceLoaderAware;
@@ -63,7 +63,7 @@
 
   static final String project = "solr";
   static final String base = "org.apache" + "." + project;
-  static final String[] packages = {"","analysis.","schema.","handler.","search.","update.","core.","request.","update.processor.","util.", "spelling.", "handler.component.", "handler.dataimport."};
+  static final String[] packages = {"","analysis.","schema.","handler.","search.","update.","core.","response.","request.","update.processor.","util.", "spelling.", "handler.component.", "handler.dataimport." };
 
   protected URLClassLoader classLoader;
   private final String instanceDir;

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardDirectoryFactory.java
            ('svn:executable' removed)

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardIndexReaderFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/solr/branches/cloud/src/java/org/apache/solr/core/StandardIndexReaderFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -30,7 +30,7 @@
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
 
 import java.io.IOException;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -26,7 +26,7 @@
 import org.apache.solr.common.util.ContentStream;
 import static org.apache.solr.handler.XmlUpdateRequestHandler.COMMIT_WITHIN;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.AddUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
 import org.apache.solr.update.processor.UpdateRequestProcessor;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/CSVRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -18,7 +18,7 @@
 package org.apache.solr.handler;
 
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.SolrParams;
@@ -54,17 +54,17 @@
 
   @Override
   public String getVersion() {
-    return "$Revision:$";
+    return "$Revision$";
   }
 
   @Override
   public String getSourceId() {
-    return "$Id:$";
+    return "$Id$";
   }
 
   @Override
   public String getSource() {
-    return "$URL:$";
+    return "$URL$";
   }
 }
 

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -21,7 +21,7 @@
 import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessorChain;
 

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ContentStreamLoader.java Tue Jan 12 15:59:01 2010
@@ -19,7 +19,7 @@
 
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 
 /**

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/DumpRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 public class DumpRequestHandler extends RequestHandlerBase
 {

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/MoreLikeThisHandler.java Tue Jan 12 15:59:01 2010
@@ -51,7 +51,7 @@
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SimpleFacets;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.DocIterator;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/PingRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -24,8 +24,8 @@
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
 
 
 /**

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/ReplicationHandler.java Tue Jan 12 15:59:01 2010
@@ -26,9 +26,9 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.*;
-import org.apache.solr.request.BinaryQueryResponseWriter;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.BinaryQueryResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.update.DirectUpdateHandler2;
 import org.apache.solr.util.RefCounted;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerBase.java Tue Jan 12 15:59:01 2010
@@ -25,8 +25,8 @@
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrInfoMBean;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.DocSet;
 import org.apache.solr.util.SolrPluginUtils;
 import org.apache.lucene.queryParser.ParseException;
@@ -85,8 +85,8 @@
    *
    * @param args The {@link org.apache.solr.common.util.NamedList} to initialize from
    *
-   * @see #handleRequest(org.apache.solr.request.SolrQueryRequest, org.apache.solr.request.SolrQueryResponse)
-   * @see #handleRequestBody(org.apache.solr.request.SolrQueryRequest, org.apache.solr.request.SolrQueryResponse)
+   * @see #handleRequest(org.apache.solr.request.SolrQueryRequest, org.apache.solr.response.SolrQueryResponse)
+   * @see #handleRequestBody(org.apache.solr.request.SolrQueryRequest, org.apache.solr.response.SolrQueryResponse)
    * @see org.apache.solr.util.SolrPluginUtils#setDefaults(org.apache.solr.request.SolrQueryRequest, org.apache.solr.common.params.SolrParams, org.apache.solr.common.params.SolrParams, org.apache.solr.common.params.SolrParams)
    * @see SolrParams#toSolrParams(org.apache.solr.common.util.NamedList)
    *

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/RequestHandlerUtils.java Tue Jan 12 15:59:01 2010
@@ -24,7 +24,7 @@
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.CommitUpdateCommand;
 import org.apache.solr.update.RollbackUpdateCommand;
 import org.apache.solr.update.processor.UpdateRequestProcessor;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/SpellCheckerRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -26,7 +26,7 @@
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XMLLoader.java Tue Jan 12 15:59:01 2010
@@ -22,7 +22,7 @@
 import org.apache.solr.update.RollbackUpdateCommand;
 import org.apache.solr.update.DeleteUpdateCommand;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.common.SolrException;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/XmlUpdateRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequestBase;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessorChain;
 import org.slf4j.Logger;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/AdminHandlers.java Tue Jan 12 15:59:01 2010
@@ -24,8 +24,8 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.util.plugin.SolrCoreAware;
 
 /**

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Tue Jan 12 15:59:01 2010
@@ -30,8 +30,8 @@
 import org.apache.solr.core.DirectoryFactory;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.RefCounted;
 import org.apache.solr.update.MergeIndexesCommand;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -57,7 +57,7 @@
 import org.apache.solr.common.util.Base64;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java Tue Jan 12 15:59:01 2010
@@ -28,7 +28,7 @@
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.handler.RequestHandlerUtils;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 /**
  * similar to "admin/registry.jsp" 

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -22,7 +22,7 @@
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 /**
  * @version $Id$

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -36,9 +36,9 @@
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.handler.RequestHandlerUtils;
-import org.apache.solr.request.RawResponseWriter;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.RawResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
 
 /**
  * This handler uses the RawResponseWriter to give client access to

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Tue Jan 12 15:59:01 2010
@@ -37,7 +37,7 @@
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.IndexSchema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.handler.RequestHandlerUtils;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 
 /**
  * Copied from "admin/threaddump.jsp"

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/QueryComponent.java Tue Jan 12 15:59:01 2010
@@ -34,7 +34,7 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.*;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/ResponseBuilder.java Tue Jan 12 15:59:01 2010
@@ -23,7 +23,7 @@
 import org.apache.solr.common.util.RTimer;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.DocListAndSet;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.SortSpec;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchComponent.java Tue Jan 12 15:59:01 2010
@@ -25,7 +25,7 @@
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.SolrInfoMBean;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
 /**

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/handler/component/SearchHandler.java Tue Jan 12 15:59:01 2010
@@ -27,7 +27,7 @@
 import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java Tue Jan 12 15:59:01 2010
@@ -35,8 +35,11 @@
 import org.apache.lucene.document.Document;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.highlight.*;
+import org.apache.lucene.search.vectorhighlight.FastVectorHighlighter;
+import org.apache.lucene.search.vectorhighlight.FieldQuery;
+import org.apache.lucene.search.vectorhighlight.FragListBuilder;
+import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.common.ResourceLoader;
 import org.apache.solr.common.params.HighlightParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
@@ -45,12 +48,15 @@
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.plugin.PluginInfoInitialized;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * 
@@ -59,6 +65,8 @@
 public class DefaultSolrHighlighter extends SolrHighlighter implements PluginInfoInitialized
 {
 
+  public static Logger log = LoggerFactory.getLogger(DefaultSolrHighlighter.class);
+  
   private SolrCore solrCore;
 
   public DefaultSolrHighlighter() {
@@ -71,16 +79,35 @@
   public void init(PluginInfo info) {
     formatters.clear();
     fragmenters.clear();
+    fragListBuilders.clear();
+    fragmentsBuilders.clear();
 
+    // Load the fragmenters
     SolrFragmenter frag = solrCore.initPlugins(info.getChildren("fragmenter") , fragmenters,SolrFragmenter.class,null);
     if (frag == null) frag = new GapFragmenter();
     fragmenters.put("", frag);
     fragmenters.put(null, frag);
+
     // Load the formatters
     SolrFormatter fmt = solrCore.initPlugins(info.getChildren("formatter"), formatters,SolrFormatter.class,null);
     if (fmt == null) fmt = new HtmlFormatter();
     formatters.put("", fmt);
     formatters.put(null, fmt);
+
+    // Load the FragListBuilders
+    SolrFragListBuilder fragListBuilder = solrCore.initPlugins(info.getChildren("fragListBuilder"),
+        fragListBuilders, SolrFragListBuilder.class, null );
+    if( fragListBuilder == null ) fragListBuilder = new SimpleFragListBuilder();
+    fragListBuilders.put( "", fragListBuilder );
+    fragListBuilders.put( null, fragListBuilder );
+    
+    // Load the FragmentsBuilders
+    SolrFragmentsBuilder fragsBuilder = solrCore.initPlugins(info.getChildren("fragmentsBuilder"),
+        fragmentsBuilders, SolrFragmentsBuilder.class, null);
+    if( fragsBuilder == null ) fragsBuilder = new ScoreOrderFragmentsBuilder();
+    fragmentsBuilders.put( "", fragsBuilder );
+    fragmentsBuilders.put( null, fragsBuilder );
+    
     initialized = true;
 
   }
@@ -97,7 +124,13 @@
     formatters.put("", fmt);
     formatters.put(null, fmt);    
 
-
+    SolrFragListBuilder fragListBuilder = new SimpleFragListBuilder();
+    fragListBuilders.put( "", fragListBuilder );
+    fragListBuilders.put( null, fragListBuilder );
+    
+    SolrFragmentsBuilder fragsBuilder = new ScoreOrderFragmentsBuilder();
+    fragmentsBuilders.put( "", fragsBuilder );
+    fragmentsBuilders.put( null, fragsBuilder );
   }
 
   /**
@@ -233,6 +266,24 @@
     return frag.getFragmenter( fieldName, params );
   }
   
+  protected FragListBuilder getFragListBuilder( SolrParams params ){
+    String flb = params.get( HighlightParams.FRAG_LIST_BUILDER );
+    SolrFragListBuilder solrFlb = fragListBuilders.get( flb );
+    if( solrFlb == null ){
+      throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragListBuilder: " + flb );
+    }
+    return solrFlb.getFragListBuilder( params );
+  }
+  
+  protected FragmentsBuilder getFragmentsBuilder( SolrParams params ){
+    String fb = params.get( HighlightParams.FRAGMENTS_BUILDER );
+    SolrFragmentsBuilder solrFb = fragmentsBuilders.get( fb );
+    if( solrFb == null ){
+      throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragmentsBuilder: " + fb );
+    }
+    return solrFb.getFragmentsBuilder( params );
+  }
+  
   /**
    * Generates a list of Highlighted query fragments for each item in a list
    * of documents, or returns null if highlighting is disabled.
@@ -251,151 +302,199 @@
     if (!isHighlightingEnabled(params))
         return null;
      
-     SolrIndexSearcher searcher = req.getSearcher();
-     IndexSchema schema = searcher.getSchema();
-     NamedList fragments = new SimpleOrderedMap();
-     String[] fieldNames = getHighlightFields(query, req, defaultFields);
-     Set<String> fset = new HashSet<String>();
+    SolrIndexSearcher searcher = req.getSearcher();
+    IndexSchema schema = searcher.getSchema();
+    NamedList fragments = new SimpleOrderedMap();
+    String[] fieldNames = getHighlightFields(query, req, defaultFields);
+    Set<String> fset = new HashSet<String>();
      
-     {
-       // pre-fetch documents using the Searcher's doc cache
-       for(String f : fieldNames) { fset.add(f); }
-       // fetch unique key if one exists.
-       SchemaField keyField = schema.getUniqueKeyField();
-       if(null != keyField)
-         fset.add(keyField.getName());  
-     }
+    {
+      // pre-fetch documents using the Searcher's doc cache
+      for(String f : fieldNames) { fset.add(f); }
+      // fetch unique key if one exists.
+      SchemaField keyField = schema.getUniqueKeyField();
+      if(null != keyField)
+        fset.add(keyField.getName());  
+    }
 
+    // get FastVectorHighlighter instance out of the processing loop
+    FastVectorHighlighter fvh = new FastVectorHighlighter(
+        // FVH cannot process hl.usePhraseHighlighter parameter per-field basis
+        params.getBool( HighlightParams.USE_PHRASE_HIGHLIGHTER, true ),
+        // FVH cannot process hl.requireFieldMatch parameter per-field basis
+        params.getBool( HighlightParams.FIELD_MATCH, false ),
+        getFragListBuilder( params ),
+        getFragmentsBuilder( params ) );
+    FieldQuery fieldQuery = fvh.getFieldQuery( query );
 
     // Highlight each document
     DocIterator iterator = docs.iterator();
     for (int i = 0; i < docs.size(); i++) {
-       int docId = iterator.nextDoc();
-       Document doc = searcher.doc(docId, fset);
-       NamedList docSummaries = new SimpleOrderedMap();
-       for (String fieldName : fieldNames) {
-          fieldName = fieldName.trim();
-          String[] docTexts = doc.getValues(fieldName);
-          if (docTexts == null) continue;
-          
-          TokenStream tstream = null;
-          int numFragments = getMaxSnippets(fieldName, params);
-          boolean mergeContiguousFragments = isMergeContiguousFragments(fieldName, params);
-
-          String[] summaries = null;
-          List<TextFragment> frags = new ArrayList<TextFragment>();
-
-          TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
-          try {
-              TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
-              if (tvStream != null) {
-                tots = new TermOffsetsTokenStream(tvStream);
-              }
-          }
-          catch (IllegalArgumentException e) {
-            // No problem. But we can't use TermOffsets optimization.
-          }
+      int docId = iterator.nextDoc();
+      Document doc = searcher.doc(docId, fset);
+      NamedList docSummaries = new SimpleOrderedMap();
+      for (String fieldName : fieldNames) {
+        fieldName = fieldName.trim();
+        if( useFastVectorHighlighter( params, schema, fieldName ) )
+          doHighlightingByFastVectorHighlighter( fvh, fieldQuery, req, docSummaries, docId, doc, fieldName );
+        else
+          doHighlightingByHighlighter( query, req, docSummaries, docId, doc, fieldName );
+      }
+      String printId = schema.printableUniqueKey(doc);
+      fragments.add(printId == null ? null : printId, docSummaries);
+    }
+    return fragments;
+  }
+  
+  /*
+   * If fieldName is undefined, this method returns false, then
+   * doHighlightingByHighlighter() will do nothing for the field.
+   */
+  private boolean useFastVectorHighlighter( SolrParams params, IndexSchema schema, String fieldName ){
+    SchemaField schemaField = schema.getFieldOrNull( fieldName );
+    return schemaField != null &&
+      schemaField.storeTermPositions() &&
+      schemaField.storeTermOffsets() &&
+      !params.getFieldBool( fieldName, HighlightParams.USE_HIGHLIGHTER, false );
+  }
+  
+  private void doHighlightingByHighlighter( Query query, SolrQueryRequest req, NamedList docSummaries,
+      int docId, Document doc, String fieldName ) throws IOException {
+    SolrParams params = req.getParams(); 
+    String[] docTexts = doc.getValues(fieldName);
+    // according to Document javadoc, doc.getValues() never returns null. check empty instead of null
+    if (docTexts.length == 0) return;
+    
+    SolrIndexSearcher searcher = req.getSearcher();
+    IndexSchema schema = searcher.getSchema();
+    TokenStream tstream = null;
+    int numFragments = getMaxSnippets(fieldName, params);
+    boolean mergeContiguousFragments = isMergeContiguousFragments(fieldName, params);
+
+    String[] summaries = null;
+    List<TextFragment> frags = new ArrayList<TextFragment>();
+
+    TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
+    try {
+        TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
+        if (tvStream != null) {
+          tots = new TermOffsetsTokenStream(tvStream);
+        }
+    }
+    catch (IllegalArgumentException e) {
+      // No problem. But we can't use TermOffsets optimization.
+    }
 
-          for (int j = 0; j < docTexts.length; j++) {
-            if( tots != null ) {
-              // if we're using TermOffsets optimization, then get the next
-              // field value's TokenStream (i.e. get field j's TokenStream) from tots:
-              tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
-            } else {
-              // fall back to analyzer
-              tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
-            }
-                         
-            Highlighter highlighter;
-            if (Boolean.valueOf(req.getParams().get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true"))) {
-              // TODO: this is not always necessary - eventually we would like to avoid this wrap
-              //       when it is not needed.
-              tstream = new CachingTokenFilter(tstream);
-              
-              // get highlighter
-              highlighter = getPhraseHighlighter(query, fieldName, req, (CachingTokenFilter) tstream);
-               
-              // after highlighter initialization, reset tstream since construction of highlighter already used it
-              tstream.reset();
-            }
-            else {
-              // use "the old way"
-              highlighter = getHighlighter(query, fieldName, req);
-            }
-            
-            int maxCharsToAnalyze = params.getFieldInt(fieldName,
-                HighlightParams.MAX_CHARS,
-                Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE);
-            if (maxCharsToAnalyze < 0) {
-              highlighter.setMaxDocCharsToAnalyze(docTexts[j].length());
-            } else {
-              highlighter.setMaxDocCharsToAnalyze(maxCharsToAnalyze);
-            }
-
-            try {
-              TextFragment[] bestTextFragments = highlighter.getBestTextFragments(tstream, docTexts[j], mergeContiguousFragments, numFragments);
-              for (int k = 0; k < bestTextFragments.length; k++) {
-                if ((bestTextFragments[k] != null) && (bestTextFragments[k].getScore() > 0)) {
-                  frags.add(bestTextFragments[k]);
-                }
-              }
-            } catch (InvalidTokenOffsetsException e) {
-              throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
-            }
-          }
-          // sort such that the fragments with the highest score come first
-          Collections.sort(frags, new Comparator<TextFragment>() {
-            public int compare(TextFragment arg0, TextFragment arg1) {
-              return Math.round(arg1.getScore() - arg0.getScore());
-            }
-          });
-          
-           // convert fragments back into text
-           // TODO: we can include score and position information in output as snippet attributes
-          if (frags.size() > 0) {
-            ArrayList<String> fragTexts = new ArrayList<String>();
-            for (TextFragment fragment: frags) {
-              if ((fragment != null) && (fragment.getScore() > 0)) {
-                fragTexts.add(fragment.toString());
-              }
-              if (fragTexts.size() >= numFragments) break;
-            }
-            summaries = fragTexts.toArray(new String[0]);
-            if (summaries.length > 0) 
-            docSummaries.add(fieldName, summaries);
+    for (int j = 0; j < docTexts.length; j++) {
+      if( tots != null ) {
+        // if we're using TermOffsets optimization, then get the next
+        // field value's TokenStream (i.e. get field j's TokenStream) from tots:
+        tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
+      } else {
+        // fall back to analyzer
+        tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
+      }
+                   
+      Highlighter highlighter;
+      if (Boolean.valueOf(req.getParams().get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true"))) {
+        // TODO: this is not always necessary - eventually we would like to avoid this wrap
+        //       when it is not needed.
+        tstream = new CachingTokenFilter(tstream);
+        
+        // get highlighter
+        highlighter = getPhraseHighlighter(query, fieldName, req, (CachingTokenFilter) tstream);
+         
+        // after highlighter initialization, reset tstream since construction of highlighter already used it
+        tstream.reset();
+      }
+      else {
+        // use "the old way"
+        highlighter = getHighlighter(query, fieldName, req);
+      }
+      
+      int maxCharsToAnalyze = params.getFieldInt(fieldName,
+          HighlightParams.MAX_CHARS,
+          Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE);
+      if (maxCharsToAnalyze < 0) {
+        highlighter.setMaxDocCharsToAnalyze(docTexts[j].length());
+      } else {
+        highlighter.setMaxDocCharsToAnalyze(maxCharsToAnalyze);
+      }
+
+      try {
+        TextFragment[] bestTextFragments = highlighter.getBestTextFragments(tstream, docTexts[j], mergeContiguousFragments, numFragments);
+        for (int k = 0; k < bestTextFragments.length; k++) {
+          if ((bestTextFragments[k] != null) && (bestTextFragments[k].getScore() > 0)) {
+            frags.add(bestTextFragments[k]);
           }
-           // no summeries made, copy text from alternate field
-           if (summaries == null || summaries.length == 0) {
-              String alternateField = req.getParams().getFieldParam(fieldName, HighlightParams.ALTERNATE_FIELD);
-              if (alternateField != null && alternateField.length() > 0) {
-                String[] altTexts = doc.getValues(alternateField);
-                if (altTexts != null && altTexts.length > 0){
-                  int alternateFieldLen = req.getParams().getFieldInt(fieldName, HighlightParams.ALTERNATE_FIELD_LENGTH,0);
-                  if( alternateFieldLen <= 0 ){
-                    docSummaries.add(fieldName, altTexts);
-                  }
-                  else{
-                    List<String> altList = new ArrayList<String>();
-                    int len = 0;
-                    for( String altText: altTexts ){
-                      altList.add( len + altText.length() > alternateFieldLen ?
-                                   new String(altText.substring( 0, alternateFieldLen - len )) : altText );
-                      len += altText.length();
-                      if( len >= alternateFieldLen ) break;
-                    }
-                    docSummaries.add(fieldName, altList);
-                  }
-                }
-              }
-           }
- 
         }
-        String printId = schema.printableUniqueKey(doc);
-        fragments.add(printId == null ? null : printId, docSummaries);
-     }
-     return fragments;
+      } catch (InvalidTokenOffsetsException e) {
+        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+      }
+    }
+    // sort such that the fragments with the highest score come first
+    Collections.sort(frags, new Comparator<TextFragment>() {
+      public int compare(TextFragment arg0, TextFragment arg1) {
+        return Math.round(arg1.getScore() - arg0.getScore());
+      }
+    });
+    
+     // convert fragments back into text
+     // TODO: we can include score and position information in output as snippet attributes
+    if (frags.size() > 0) {
+      ArrayList<String> fragTexts = new ArrayList<String>();
+      for (TextFragment fragment: frags) {
+        if ((fragment != null) && (fragment.getScore() > 0)) {
+          fragTexts.add(fragment.toString());
+        }
+        if (fragTexts.size() >= numFragments) break;
+      }
+      summaries = fragTexts.toArray(new String[0]);
+      if (summaries.length > 0) 
+      docSummaries.add(fieldName, summaries);
+    }
+    // no summeries made, copy text from alternate field
+    if (summaries == null || summaries.length == 0) {
+      alternateField( docSummaries, params, doc, fieldName );
+    }
   }
 
+  private void doHighlightingByFastVectorHighlighter( FastVectorHighlighter highlighter, FieldQuery fieldQuery,
+      SolrQueryRequest req, NamedList docSummaries, int docId, Document doc, String fieldName ) throws IOException {
+    SolrParams params = req.getParams(); 
+    String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getReader(), docId, fieldName,
+        params.getFieldInt( fieldName, HighlightParams.FRAGSIZE, 100 ),
+        params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ) );
+    if( snippets != null && snippets.length > 0 )
+      docSummaries.add( fieldName, snippets );
+    else
+      alternateField( docSummaries, params, doc, fieldName );
+  }
+  
+  private void alternateField( NamedList docSummaries, SolrParams params, Document doc, String fieldName ){
+    String alternateField = params.getFieldParam(fieldName, HighlightParams.ALTERNATE_FIELD);
+    if (alternateField != null && alternateField.length() > 0) {
+      String[] altTexts = doc.getValues(alternateField);
+      if (altTexts != null && altTexts.length > 0){
+        int alternateFieldLen = params.getFieldInt(fieldName, HighlightParams.ALTERNATE_FIELD_LENGTH,0);
+        if( alternateFieldLen <= 0 ){
+          docSummaries.add(fieldName, altTexts);
+        }
+        else{
+          List<String> altList = new ArrayList<String>();
+          int len = 0;
+          for( String altText: altTexts ){
+            altList.add( len + altText.length() > alternateFieldLen ?
+                new String(altText.substring( 0, alternateFieldLen - len )) : altText );
+            len += altText.length();
+            if( len >= alternateFieldLen ) break;
+          }
+          docSummaries.add(fieldName, altList);
+        }
+      }
+    }
+  }
+  
   private TokenStream createAnalyzerTStream(IndexSchema schema, String fieldName, String docText) throws IOException {
 
     TokenStream tstream;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/GapFragmenter.java Tue Jan 12 15:59:01 2010
@@ -16,11 +16,9 @@
  */
 package org.apache.solr.highlight;
 
-import org.apache.lucene.analysis.Token;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
 import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
-import org.apache.lucene.analysis.tokenattributes.TermAttribute;
 import org.apache.lucene.search.highlight.Fragmenter;
 import org.apache.lucene.search.highlight.NullFragmenter;
 import org.apache.lucene.search.highlight.SimpleFragmenter;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/highlight/SolrHighlighter.java Tue Jan 12 15:59:01 2010
@@ -46,6 +46,15 @@
   // Thread safe registry
   protected final Map<String,SolrFragmenter> fragmenters =
     Collections.synchronizedMap( new HashMap<String, SolrFragmenter>() );
+
+  // Thread safe registry
+  protected final Map<String, SolrFragListBuilder> fragListBuilders =
+    Collections.synchronizedMap( new HashMap<String, SolrFragListBuilder>() );
+
+  // Thread safe registry
+  protected final Map<String, SolrFragmentsBuilder> fragmentsBuilders =
+    Collections.synchronizedMap( new HashMap<String, SolrFragmentsBuilder>() );
+
   @Deprecated
   public abstract void initalize( SolrConfig config );
 

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/request/SolrRequestHandler.java Tue Jan 12 15:59:01 2010
@@ -19,6 +19,7 @@
 
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.response.SolrQueryResponse;
 
 /**
  * Implementations of <code>SolrRequestHandler</code> are called to handle query requests.

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDIntField.java Tue Jan 12 15:59:01 2010
@@ -21,8 +21,8 @@
 import org.apache.solr.search.function.ValueSource;
 import org.apache.lucene.document.Fieldable;
 import org.apache.solr.util.BCDUtils;
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
 
 import java.util.Map;
 import java.io.IOException;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDLongField.java Tue Jan 12 15:59:01 2010
@@ -17,7 +17,7 @@
 
 package org.apache.solr.schema;
 
-import org.apache.solr.request.XMLWriter;
+import org.apache.solr.response.XMLWriter;
 import org.apache.lucene.document.Fieldable;
 
 import java.io.IOException;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BCDStrField.java Tue Jan 12 15:59:01 2010
@@ -17,7 +17,7 @@
 
 package org.apache.solr.schema;
 
-import org.apache.solr.request.XMLWriter;
+import org.apache.solr.response.XMLWriter;
 import org.apache.lucene.document.Fieldable;
 
 import java.io.IOException;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BinaryField.java Tue Jan 12 15:59:01 2010
@@ -17,8 +17,8 @@
 
 package org.apache.solr.schema;
 
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
 import org.apache.solr.common.util.Base64;
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.document.Field;

Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java?rev=898393&r1=898392&r2=898393&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/schema/BoolField.java Tue Jan 12 15:59:01 2010
@@ -26,8 +26,8 @@
 import org.apache.lucene.analysis.Tokenizer;
 import org.apache.lucene.analysis.tokenattributes.TermAttribute;
 import org.apache.lucene.document.Fieldable;
-import org.apache.solr.request.XMLWriter;
-import org.apache.solr.request.TextResponseWriter;
+import org.apache.solr.response.TextResponseWriter;
+import org.apache.solr.response.XMLWriter;
 import org.apache.solr.analysis.SolrAnalyzer;
 
 import java.util.Map;