You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2011/05/22 23:45:45 UTC

svn commit: r1126234 [24/28] - in /lucene/dev/branches/solr2452: ./ dev-tools/eclipse/ dev-tools/idea/ dev-tools/idea/.idea/ dev-tools/idea/lucene/ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/db/bdb-je/ dev-tools/idea/lucene/contri...

Modified: lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java (original)
+++ lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java Sun May 22 21:45:19 2011
@@ -1,6 +1,6 @@
 
 
-/* First created by JCasGen Fri Mar 04 12:48:08 CET 2011 */
+/* First created by JCasGen Sat May 07 22:33:38 JST 2011 */
 package org.apache.solr.uima.ts;
 
 import org.apache.uima.jcas.JCas; 
@@ -11,8 +11,8 @@ import org.apache.uima.jcas.tcas.Annotat
 
 
 /** 
- * Updated by JCasGen Fri Mar 04 12:50:14 CET 2011
- * XML source: /Users/tommasoteofili/Documents/workspaces/lucene_workspace/lucene_dev/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml
+ * Updated by JCasGen Sat May 07 22:33:38 JST 2011
+ * XML source: /Users/koji/Documents/workspace/DummyEntityAnnotator/desc/DummyEntityAEDescriptor.xml
  * @generated */
 public class EntityAnnotation extends Annotation {
   /** @generated
@@ -57,6 +57,42 @@ public class EntityAnnotation extends An
   @generated modifiable */
   private void readObject() {}
      
-}
+ 
+    
+  //*--------------*
+  //* Feature: name
+
+  /** getter for name - gets 
+   * @generated */
+  public String getName() {
+    if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_name == null)
+      jcasType.jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_name);}
+    
+  /** setter for name - sets  
+   * @generated */
+  public void setName(String v) {
+    if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_name == null)
+      jcasType.jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+    jcasType.ll_cas.ll_setStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_name, v);}    
+   
+    
+  //*--------------*
+  //* Feature: entity
+
+  /** getter for entity - gets 
+   * @generated */
+  public String getEntity() {
+    if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_entity == null)
+      jcasType.jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_entity);}
+    
+  /** setter for entity - sets  
+   * @generated */
+  public void setEntity(String v) {
+    if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_entity == null)
+      jcasType.jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+    jcasType.ll_cas.ll_setStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_entity, v);}    
+  }
 
     
\ No newline at end of file

Modified: lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java (original)
+++ lucene/dev/branches/solr2452/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java Sun May 22 21:45:19 2011
@@ -1,5 +1,5 @@
 
-/* First created by JCasGen Fri Mar 04 12:48:08 CET 2011 */
+/* First created by JCasGen Sat May 07 22:33:38 JST 2011 */
 package org.apache.solr.uima.ts;
 
 import org.apache.uima.jcas.JCas;
@@ -9,10 +9,12 @@ import org.apache.uima.cas.impl.FSGenera
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.cas.Type;
+import org.apache.uima.cas.impl.FeatureImpl;
+import org.apache.uima.cas.Feature;
 import org.apache.uima.jcas.tcas.Annotation_Type;
 
 /** 
- * Updated by JCasGen Fri Mar 04 12:50:14 CET 2011
+ * Updated by JCasGen Sat May 07 22:33:38 JST 2011
  * @generated */
 public class EntityAnnotation_Type extends Annotation_Type {
   /** @generated */
@@ -38,6 +40,42 @@ public class EntityAnnotation_Type exten
   /** @generated 
      @modifiable */
   public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.solr.uima.ts.EntityAnnotation");
+ 
+  /** @generated */
+  final Feature casFeat_name;
+  /** @generated */
+  final int     casFeatCode_name;
+  /** @generated */ 
+  public String getName(int addr) {
+        if (featOkTst && casFeat_name == null)
+      jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_name);
+  }
+  /** @generated */    
+  public void setName(int addr, String v) {
+        if (featOkTst && casFeat_name == null)
+      jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+    ll_cas.ll_setStringValue(addr, casFeatCode_name, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_entity;
+  /** @generated */
+  final int     casFeatCode_entity;
+  /** @generated */ 
+  public String getEntity(int addr) {
+        if (featOkTst && casFeat_entity == null)
+      jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_entity);
+  }
+  /** @generated */    
+  public void setEntity(int addr, String v) {
+        if (featOkTst && casFeat_entity == null)
+      jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+    ll_cas.ll_setStringValue(addr, casFeatCode_entity, v);}
+    
+  
 
 
 
@@ -47,6 +85,14 @@ public class EntityAnnotation_Type exten
     super(jcas, casType);
     casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator());
 
+ 
+    casFeat_name = jcas.getRequiredFeatureDE(casType, "name", "uima.cas.String", featOkTst);
+    casFeatCode_name  = (null == casFeat_name) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_name).getCode();
+
+ 
+    casFeat_entity = jcas.getRequiredFeatureDE(casType, "entity", "uima.cas.String", featOkTst);
+    casFeatCode_entity  = (null == casFeat_entity) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_entity).getCode();
+
   }
 }
 

Modified: lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml (original)
+++ lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml Sun May 22 21:45:19 2011
@@ -32,6 +32,18 @@
           <name>org.apache.solr.uima.ts.EntityAnnotation</name>
           <description/>
           <supertypeName>uima.tcas.Annotation</supertypeName>
+          <features>
+            <featureDescription>
+              <name>name</name>
+              <description/>
+              <rangeTypeName>uima.cas.String</rangeTypeName>
+            </featureDescription>
+            <featureDescription>
+              <name>entity</name>
+              <description/>
+              <rangeTypeName>uima.cas.String</rangeTypeName>
+            </featureDescription>
+          </features>
         </typeDescription>
       </types>
     </typeSystemDescription>

Modified: lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml (original)
+++ lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml Sun May 22 21:45:19 2011
@@ -597,6 +597,7 @@
       stored="true" multiValued="true"/> <dynamicField name="random_*"
       type="random" />
     -->
+    <dynamicField name="*_sm" type="string" indexed="true" stored="true" multiValued="true"/>
     <!--
       uncomment the following to ignore any fields that don't already
       match an existing field name or dynamic field, rather than

Modified: lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml (original)
+++ lucene/dev/branches/solr2452/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml Sun May 22 21:45:19 2011
@@ -295,7 +295,7 @@
   <!--
     <indexReaderFactory name="IndexReaderFactory"
     class="org.apache.solr.core.StandardIndexReaderFactory"> <int
-    name="termInfosIndexDivisor">12</int> </indexReaderFactory >
+    name="setTermIndexDivisor">12</int> </indexReaderFactory >
   -->
 
 
@@ -855,7 +855,7 @@
   -->
   <requestHandler name="/update" class="solr.XmlUpdateRequestHandler">
     <lst name="defaults">
-      <str name="update.processor">uima</str>
+      <str name="update.chain">uima</str>
     </lst>
   </requestHandler>
 
@@ -953,42 +953,6 @@
     </lst>
   </requestHandler>
 
-  <highlighting>
-    <!-- Configure the standard fragmenter -->
-    <!-- This could most likely be commented out in the "default" case -->
-    <fragmenter name="gap"
-      class="org.apache.solr.highlight.GapFragmenter" default="true">
-      <lst name="defaults">
-        <int name="hl.fragsize">100</int>
-      </lst>
-    </fragmenter>
-
-    <!--
-      A regular-expression-based fragmenter (f.i., for sentence
-      extraction)
-    -->
-    <fragmenter name="regex"
-      class="org.apache.solr.highlight.RegexFragmenter">
-      <lst name="defaults">
-        <!-- slightly smaller fragsizes work better because of slop -->
-        <int name="hl.fragsize">70</int>
-        <!-- allow 50% slop on fragment sizes -->
-        <float name="hl.regex.slop">0.5</float>
-        <!-- a basic sentence pattern -->
-        <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
-      </lst>
-    </fragmenter>
-
-    <!-- Configure the standard formatter -->
-    <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter"
-      default="true">
-      <lst name="defaults">
-        <str name="hl.simple.pre"><![CDATA[<em>]]></str>
-        <str name="hl.simple.post"><![CDATA[</em>]]></str>
-      </lst>
-    </formatter>
-  </highlighting>
-
   <!--
     An example dedup update processor that creates the "id" field on the
     fly based on the hash code of some other fields. This example has
@@ -997,16 +961,122 @@
     anyway. You have to link the chain to an update handler above to use
     it ie: <requestHandler name="/update
     "class="solr.XmlUpdateRequestHandler"> <lst name="defaults"> <str
-    name="update.processor">dedupe</str> </lst> </requestHandler>
+    name="update.chain">dedupe</str> </lst> </requestHandler>
   -->
 
   <updateRequestProcessorChain name="uima">
-    <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory"/>
-    <processor class="solr.LogUpdateProcessorFactory" />
+    <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+      <lst name="uimaConfig">
+        <lst name="runtimeParameters">
+          <int name="ngramsize">3</int>
+        </lst>
+        <str name="analysisEngine">/TestAE.xml</str>
+        <lst name="analyzeFields">
+          <bool name="merge">false</bool>
+          <arr name="fields">
+            <str>text</str>
+          </arr>
+        </lst>
+        <lst name="fieldMappings">
+          <lst name="type">
+            <str name="name">org.apache.uima.SentenceAnnotation</str>
+            <lst name="mapping">
+              <str name="feature">coveredText</str>
+              <str name="field">sentence</str>
+            </lst>
+          </lst>
+          <lst name="type">
+            <str name="name">org.apache.solr.uima.ts.SentimentAnnotation</str>
+            <lst name="mapping">
+              <str name="feature">mood</str>
+              <str name="field">sentiment</str>
+            </lst>
+          </lst>
+          <lst name="type">
+            <str name="name">org.apache.solr.uima.ts.EntityAnnotation</str>
+            <lst name="mapping">
+              <str name="feature">entity</str>
+              <str name="fieldNameFeature">name</str>
+              <str name="dynamicField">*_sm</str>
+            </lst>
+          </lst>
+        </lst>
+      </lst>
+    </processor>
     <processor class="solr.RunUpdateProcessorFactory" />
   </updateRequestProcessorChain>
 
+  <updateRequestProcessorChain name="uima-multi-map">
+    <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+      <lst name="uimaConfig">
+        <lst name="runtimeParameters">
+          <int name="ngramsize">3</int>
+        </lst>
+        <str name="analysisEngine">/TestAE.xml</str>
+        <lst name="analyzeFields">
+          <bool name="merge">false</bool>
+          <arr name="fields">
+            <str>text</str>
+          </arr>
+        </lst>
+        <lst name="fieldMappings">
+          <lst name="type">
+            <str name="name">a-type-which-can-have-multiple-features</str>
+            <lst name="mapping">
+              <str name="feature">A</str>
+              <str name="field">1</str>
+            </lst>
+            <lst name="mapping">
+              <str name="feature">B</str>
+              <str name="field">2</str>
+            </lst>
+          </lst>
+        </lst>
+      </lst>
+    </processor>
+  </updateRequestProcessorChain>
+
+  <updateRequestProcessorChain name="uima-not-ignoreErrors">
+    <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+      <lst name="uimaConfig">
+        <lst name="runtimeParameters">
+          <int name="ngramsize">3</int>
+        </lst>
+        <str name="analysisEngine">/TestExceptionAE.xml</str>
+        <bool name="ignoreErrors">false</bool>
+        <lst name="analyzeFields">
+          <bool name="merge">false</bool>
+          <arr name="fields">
+            <str>text</str>
+          </arr>
+        </lst>
+        <lst name="fieldMappings"/>
+      </lst>
+    </processor>
+    <processor class="solr.RunUpdateProcessorFactory" />
+  </updateRequestProcessorChain>
 
+  <updateRequestProcessorChain name="uima-ignoreErrors">
+    <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+      <lst name="uimaConfig">
+        <lst name="runtimeParameters">
+          <int name="ngramsize">3</int>
+        </lst>
+        <str name="analysisEngine">/TestExceptionAE.xml</str>
+        <bool name="ignoreErrors">true</bool>
+        <!-- This is optional. It is used for logging when text processing fails. Usually, set uniqueKey field name -->
+        <str name="logField">id</str>
+        <lst name="analyzeFields">
+          <bool name="merge">false</bool>
+          <arr name="fields">
+            <str>text</str>
+          </arr>
+        </lst>
+        <lst name="fieldMappings"/>
+      </lst>
+    </processor>
+    <processor class="solr.RunUpdateProcessorFactory" />
+  </updateRequestProcessorChain>
 
   <!--
     queryResponseWriter plugins... query responses will be written using
@@ -1062,23 +1132,4 @@
     -->
   </admin>
 
-<uimaConfig>
-   <runtimeParameters>
-     <ngramsize>3</ngramsize>
-  </runtimeParameters>
-  <analysisEngine>/TestAE.xml</analysisEngine>
-  <analyzeFields merge="false">text</analyzeFields>
-  <fieldMapping>
-    <type name="org.apache.uima.SentenceAnnotation">
-      <map feature="coveredText" field="sentence"/>
-    </type>
-    <type name="org.apache.solr.uima.ts.SentimentAnnotation">
-      <map feature="mood" field="sentiment"/>
-    </type>
-    <type name="org.apache.solr.uima.ts.EntityAnnotation">
-      <map feature="coveredText" field="entity"/>
-    </type>
-  </fieldMapping>
-</uimaConfig>
-
 </config>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/books.json
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/books.json?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/books.json (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/books.json Sun May 22 21:45:19 2011
@@ -1,7 +1,5 @@
-{
-
-"add": {
-  "doc": {
+[
+  {
     "id" : "978-0641723445",
     "cat" : ["book","hardcover"],
     "title" : "The Lightning Thief",
@@ -13,11 +11,8 @@
     "price" : 12.50,
     "pages_i" : 384
   }
-}
-
 ,
-"add": {
-  "doc": {
+  {
     "id" : "978-1423103349",
     "cat" : ["book","paperback"],
     "title" : "The Sea of Monsters",
@@ -29,6 +24,4 @@
     "price" : 6.49,
     "pages_i" : 304
   }
-}
-
-}
+]

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/hd.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/hd.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/hd.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/hd.xml Sun May 22 21:45:19 2011
@@ -20,6 +20,8 @@
   <field name="id">SP2514N</field>
   <field name="name">Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133</field>
   <field name="manu">Samsung Electronics Co. Ltd.</field>
+  <!-- Join -->
+  <field name="manu_id_s">samsung</field>
   <field name="cat">electronics</field>
   <field name="cat">hard drive</field>
   <field name="features">7200RPM, 8MB cache, IDE Ultra ATA-133</field>
@@ -36,6 +38,8 @@
   <field name="id">6H500F0</field>
   <field name="name">Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300</field>
   <field name="manu">Maxtor Corp.</field>
+  <!-- Join -->
+  <field name="manu_id_s">maxtor</field>
   <field name="cat">electronics</field>
   <field name="cat">hard drive</field>
   <field name="features">SATA 3.0Gb/s, NCQ</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_other.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_other.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_other.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_other.xml Sun May 22 21:45:19 2011
@@ -21,6 +21,8 @@
   <field name="id">F8V7067-APL-KIT</field>
   <field name="name">Belkin Mobile Power Cord for iPod w/ Dock</field>
   <field name="manu">Belkin</field>
+  <!-- Join -->
+  <field name="manu_id_s">belkin</field>
   <field name="cat">electronics</field>
   <field name="cat">connector</field>
   <field name="features">car power adapter, white</field>
@@ -37,6 +39,8 @@
   <field name="id">IW-02</field>
   <field name="name">iPod &amp; iPod Mini USB 2.0 Cable</field>
   <field name="manu">Belkin</field>
+  <!-- Join -->
+  <field name="manu_id_s">belkin</field>
   <field name="cat">electronics</field>
   <field name="cat">connector</field>
   <field name="features">car power adapter for iPod, white</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_video.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_video.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_video.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/ipod_video.xml Sun May 22 21:45:19 2011
@@ -19,6 +19,8 @@
   <field name="id">MA147LL/A</field>
   <field name="name">Apple 60 GB iPod with Video Playback Black</field>
   <field name="manu">Apple Computer Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">apple</field>
   <field name="cat">electronics</field>
   <field name="cat">music</field>
   <field name="features">iTunes, Podcasts, Audiobooks</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/mem.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/mem.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/mem.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/mem.xml Sun May 22 21:45:19 2011
@@ -20,6 +20,8 @@
   <field name="id">TWINX2048-3200PRO</field>
   <field name="name">CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail</field>
   <field name="manu">Corsair Microsystems Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
   <field name="features">CAS latency 2,	2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
@@ -38,6 +40,8 @@
   <field name="id">VS1GB400C3</field>
   <field name="name">CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail</field>
   <field name="manu">Corsair Microsystems Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
   <field name="price">74.99</field>
@@ -54,6 +58,8 @@
   <field name="id">VDBDB1A16</field>
   <field name="name">A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM</field>
   <field name="manu">A-DATA Technology Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
   <field name="features">CAS latency 3,	 2.7v</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/monitor.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/monitor.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/monitor.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/monitor.xml Sun May 22 21:45:19 2011
@@ -19,6 +19,8 @@
   <field name="id">3007WFP</field>
   <field name="name">Dell Widescreen UltraSharp 3007WFP</field>
   <field name="manu">Dell, Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">dell</field>
   <field name="cat">electronics</field>
   <field name="cat">monitor</field>
   <field name="features">30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/monitor2.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/monitor2.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/monitor2.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/monitor2.xml Sun May 22 21:45:19 2011
@@ -19,6 +19,8 @@
   <field name="id">VA902B</field>
   <field name="name">ViewSonic VA902B - flat panel display - TFT - 19"</field>
   <field name="manu">ViewSonic Corp.</field>
+  <!-- Join -->
+  <field name="manu_id_s">viewsonic</field>
   <field name="cat">electronics</field>
   <field name="cat">monitor</field>
   <field name="features">19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/mp500.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/mp500.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/mp500.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/mp500.xml Sun May 22 21:45:19 2011
@@ -19,6 +19,8 @@
   <field name="id">0579B002</field>
   <field name="name">Canon PIXMA MP500 All-In-One Photo Printer</field>
   <field name="manu">Canon Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">canon</field>
   <field name="cat">electronics</field>
   <field name="cat">multifunction printer</field>
   <field name="cat">printer</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/sd500.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/sd500.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/sd500.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/sd500.xml Sun May 22 21:45:19 2011
@@ -19,6 +19,8 @@
   <field name="id">9885A004</field>
   <field name="name">Canon PowerShot SD500</field>
   <field name="manu">Canon Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">canon</field>
   <field name="cat">electronics</field>
   <field name="cat">camera</field>
   <field name="features">3x zoop, 7.1 megapixel Digital ELPH</field>

Modified: lucene/dev/branches/solr2452/solr/example/exampledocs/vidcard.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/exampledocs/vidcard.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/exampledocs/vidcard.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/exampledocs/vidcard.xml Sun May 22 21:45:19 2011
@@ -19,7 +19,10 @@
 <doc>
   <field name="id">EN7800GTX/2DHTV/256M</field>
   <field name="name">ASUS Extreme N7800GTX/2DHTV (256 MB)</field>
+  <!-- Denormalized -->
   <field name="manu">ASUS Computer Inc.</field>
+  <!-- Join -->
+  <field name="manu_id_s">asus</field>
   <field name="cat">electronics</field>
   <field name="cat">graphics card</field>
   <field name="features">NVIDIA GeForce 7800 GTX GPU/VPU clocked at 486MHz</field>
@@ -39,6 +42,8 @@
   <field name="id">100-435805</field>
   <field name="name">ATI Radeon X1900 XTX 512 MB PCIE Video Card</field>
   <field name="manu">ATI Technologies</field>
+  <!-- Join -->
+  <field name="manu_id_s">ati</field>
   <field name="cat">electronics</field>
   <field name="cat">graphics card</field>
   <field name="features">ATI RADEON X1900 GPU/VPU clocked at 650MHz</field>

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/solrconfig.xml?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/solrconfig.xml Sun May 22 21:45:19 2011
@@ -774,6 +774,7 @@
        <str name="q.alt">*:*</str>
        <str name="rows">10</str>
        <str name="fl">*,score</str>
+
        <str name="mlt.qf">
          text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
        </str>
@@ -792,6 +793,8 @@
        <int name="facet.range.start">0</int>
        <int name="facet.range.end">600</int>
        <int name="facet.range.gap">50</int>
+       <str name="facet.range">popularity</str>
+       <int name="f.popularity.facet.range.gap">3</int>
        <str name="facet.range.other">after</str>
        <str name="facet.date">manufacturedate_dt</str>
        <str name="facet.date.start">NOW/YEAR-10YEARS</str>
@@ -841,7 +844,7 @@
       -->
     <!--
        <lst name="defaults">
-         <str name="update.processor">dedupe</str>
+         <str name="update.chain">dedupe</str>
        </lst>
        -->
     </requestHandler>
@@ -1195,17 +1198,20 @@
     <lst name="engine">
       <!-- The name, only one can be named "default" -->
       <str name="name">default</str>
-      <!-- Class name of Carrot2 clustering algorithm. 
-           
+
+      <!-- Class name of Carrot2 clustering algorithm.
+
            Currently available algorithms are:
            
            * org.carrot2.clustering.lingo.LingoClusteringAlgorithm
            * org.carrot2.clustering.stc.STCClusteringAlgorithm
+           * org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm
            
            See http://project.carrot2.org/algorithms.html for the
            algorithm's characteristics.
         -->
       <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
+
       <!-- Overriding values for Carrot2 default algorithm attributes.
 
            For a description of all available attributes, see:
@@ -1216,9 +1222,22 @@
            name and attribute value as parameter value.
         -->
       <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
-      
+
+      <!-- Location of Carrot2 lexical resources.
+
+           A directory from which to load Carrot2-specific stop words
+           and stop labels. Absolute or relative to Solr config directory.
+           If a specific resource (e.g. stopwords.en) is present in the
+           specified dir, it will completely override the corresponding
+           default one that ships with Carrot2.
+
+           For an overview of Carrot2 lexical resources, see:
+           http://download.carrot2.org/head/manual/#chapter.lexical-resources
+        -->
+      <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
+
       <!-- The language to assume for the documents.
-           
+
            For a list of allowed values, see:
            http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
        -->
@@ -1357,7 +1376,6 @@
 
       <!-- Configure the standard encoder -->
       <encoder name="html" 
-               default="true"
                class="solr.highlight.HtmlEncoder" />
 
       <!-- Configure the standard fragListBuilder -->

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/VM_global_library.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/VM_global_library.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/VM_global_library.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/VM_global_library.vm Sun May 22 21:45:19 2011
@@ -88,13 +88,13 @@
     <ul>
     #foreach ($facet in $field)
       #set($theDate = $date.toDate("yyyy-MM-dd'T'HH:mm:ss'Z'", $facet.key))
-      #set($value = '["' + $facet.key + '" TO "' + $facet.key + $gap + '"]')
+      #set($value = '["' + $facet.key + '" TO "' + $facet.key + $gap + '"}')
 
       #set($facetURL = "#url_for_facet_date_filter($fieldName, $value)")
       #if ($facetURL != '')
         #if ($facet.key != "gap" && $facet.key != "start" && $facet.key != "end" && $facet.key != "before" && $facet.key != "after")
 
-          <li><a href="$facetURL">$date.format('MMM yyyy', $theDate)</a> ($facet.value)</li>
+          <li><a href="$facetURL">$date.format('MMM yyyy', $theDate) $gap</a> ($facet.value)</li>
         #end
         #if ($facet.key == "before" && $facet.value > 0)
           <li><a href="$facetURL">Before</a> ($facet.value)</li>
@@ -113,20 +113,20 @@
   <span class="facet-field">$display</span>
     <ul>
     #if($before && $before != "")
-      #set($value = "[* TO " + $start + "]")
+      #set($value = "[* TO " + $start + "}")
       #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
       <li><a href="$facetURL">Less than $start</a> ($before)</li>
     #end
     #foreach ($facet in $field)
       #set($rangeEnd = $math.add($facet.key, $gap))
-      #set($value = "[" + $facet.key + " TO " + $rangeEnd + "]")
+      #set($value = "[" + $facet.key + " TO " + $rangeEnd + "}")
       #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
       #if ($facetURL != '')
-        <li><a href="$facetURL">$facet.key</a> ($facet.value)</li>
+        <li><a href="$facetURL">$facet.key - $rangeEnd</a> ($facet.value)</li>
       #end
     #end
-    #if($end && $end != "")
-      #set($value = "[" + $end + " TO *]")
+    #if($end && $end != "" && $after > 0)
+      #set($value = "[" + $end + " TO *}")
       #set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
       <li><a href="$facetURL">More than $math.toNumber($end)</a> ($after)</li>
     #end
@@ -180,4 +180,8 @@
       $v
     #end
   #end
-#end  
\ No newline at end of file
+#end  
+
+#macro(capitalize $name)
+  ${name.substring(0,1).toUpperCase()}${name.substring(1)}
+#end
\ No newline at end of file

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/doc.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/doc.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/doc.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/doc.vm Sun May 22 21:45:19 2011
@@ -26,4 +26,17 @@
 #if($params.getBool("debugQuery",false))
   <a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>toggle explain</a>
   <pre style="display:none">$response.getExplainMap().get($doc.getFirstValue('id'))</pre>
+  <a href="#" onclick='jQuery(this).siblings("pre2").toggle(); return false;'>toggle all fields</a>
+  <pre2 style="display:none">
+  #foreach($fieldname in $doc.fieldNames)
+     <br>
+       <span class="field-name">$fieldname :</span>
+       <span>
+       #foreach($value in $doc.getFieldValues($fieldname))
+         $value
+       #end
+       </span>
+  #end
+   </br>
+  </pre2>
 #end
\ No newline at end of file

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_dates.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_dates.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_dates.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_dates.vm Sun May 22 21:45:19 2011
@@ -1,5 +1,9 @@
 ##TODO: Generically deal with all dates
 <h2 #annTitle("Facets generated by adding &facet.date= to the request")>Date Facets</h2>        
-#set($field = $response.response.facet_counts.facet_dates.manufacturedate_dt)
-#set($gap = $response.response.facet_counts.facet_dates.manufacturedate_dt.gap)
-#display_facet_date($field, "Manufacture Date", "manufacturedate_dt", $gap)
+#foreach ($field in $response.response.facet_counts.facet_dates)
+	#set($name = $field.key)
+	#set($display = "#capitalize($name)")
+	#set($f = $field.value)
+	#set($gap = $field.value.gap)
+    #display_facet_date($f, $display, $name, $gap)
+#end
\ No newline at end of file

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_ranges.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_ranges.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_ranges.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/facet_ranges.vm Sun May 22 21:45:19 2011
@@ -1,10 +1,12 @@
 <h2 #annTitle("Facets generated by adding &facet.range= to the request")>Range Facets</h2>
-#set($field = $response.response.facet_counts.facet_ranges.price.counts)
-#set($start = $response.response.facet_counts.facet_ranges.price.start)
-#set($end = $response.response.facet_counts.facet_ranges.price.end)
-#set($gap = $response.response.facet_counts.facet_ranges.price.gap)
-#set($before = $response.response.facet_counts.facet_ranges.price.before)
-#set($after = $response.response.facet_counts.facet_ranges.price.after)
-##TODO: Make this display the "range", not just the lower value
-##TODO: Have a generic way to deal with ranges
-#display_facet_range($field, "Price (in $)", "price", $start, $end, $gap, $before, $after)
+#foreach ($field in $response.response.facet_counts.facet_ranges)
+	#set($name = $field.key)
+	#set($display = "#capitalize($name)")
+	#set($f = $field.value.counts)
+	#set($start = $field.value.start)
+	#set($end = $field.value.end)
+	#set($gap = $field.value.gap)
+	#set($before = $field.value.before)
+	#set($after = $field.value.after)
+	#display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after)
+#end
\ No newline at end of file

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/footer.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/footer.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/footer.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/footer.vm Sun May 22 21:45:19 2011
@@ -4,7 +4,7 @@
   #if($request.params.get('debugQuery'))
   <a href="#url_for_home?#q#if($list.size($request.params.getParams('fq')) > 0)&#fqs($request.params.getParams('fq'))#end">disable debug</a>
   #else
-  <a href="#url_for_lens&debugQuery=true">enable debug</a>
+  <a href="#url_for_lens&debugQuery=true&fl=*,score">enable debug</a>
   #end
   #if($annotate)
   <a href="#url_for_home?#q#if($list.size($request.params.getParams('fq')) > 0)&#fqs($request.params.getParams('fq'))#end#boostPrice">disable annotation</a>

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/main.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/main.css?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/main.css (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/main.css Sun May 22 21:45:19 2011
@@ -18,6 +18,18 @@
   margin-left: 20px;
 }
 
+.parsed_query_header {
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 10pt;
+  font-weight: bold;
+}
+
+.parsed_query {
+  font-family: Courier, Courier New, monospaced;
+  font-size: 10pt;
+  font-weight: normal;
+}
+
 body {
   font-family: Helvetica, Arial, sans-serif;
   font-size: 10pt;

Modified: lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/query.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/query.vm?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/query.vm (original)
+++ lucene/dev/branches/solr2452/solr/example/solr/conf/velocity/query.vm Sun May 22 21:45:19 2011
@@ -27,14 +27,16 @@
         #end
       #end
     </div>
+    <div class="parsed_query_header">
      #if($request.params.get('debugQuery'))
-        <a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>toggle parsed query</a>
-        <pre style="display:none">$response.response.debug.parsedquery</pre>
+        <a href="#" onclick='jQuery(this).siblings("div").toggle(); return false;'>toggle parsed query</a>
+        <div class="parsed_query" style="display:none">$response.response.debug.parsedquery</div>
       #end
       #set($queryOpts = $request.params.get("queryOpts"))
       #if($queryOpts && $queryOpts != "")
         <input type="hidden" name="queryOpts" value="$queryOpts"/>
       #end
+    </div>
   </form>
 
 </div>

Modified: lucene/dev/branches/solr2452/solr/lib/apache-solr-noggit-pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/lib/apache-solr-noggit-pom.xml.template?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/lib/apache-solr-noggit-pom.xml.template (original)
+++ lucene/dev/branches/solr2452/solr/lib/apache-solr-noggit-pom.xml.template Sun May 22 21:45:19 2011
@@ -31,6 +31,6 @@
   <artifactId>solr-noggit</artifactId>
   <name>Solr Specific Noggit</name>
   <version>@version@</version>
-  <description>Solr Specific Noggit r944541</description>
+  <description>Solr Specific Noggit r1099557</description>
   <packaging>jar</packaging>
 </project>

Modified: lucene/dev/branches/solr2452/solr/site/features.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/features.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/features.html (original)
+++ lucene/dev/branches/solr2452/solr/site/features.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Resources</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/dev/branches/solr2452/solr/site/index.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/index.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/index.html (original)
+++ lucene/dev/branches/solr2452/solr/site/index.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Resources</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/dev/branches/solr2452/solr/site/issue_tracking.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/issue_tracking.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/issue_tracking.html (original)
+++ lucene/dev/branches/solr2452/solr/site/issue_tracking.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Resources</div>
 <div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">

Modified: lucene/dev/branches/solr2452/solr/site/linkmap.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/linkmap.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/linkmap.html (original)
+++ lucene/dev/branches/solr2452/solr/site/linkmap.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Resources</div>
 <div id="menu_1.3" class="menuitemgroup">
@@ -285,6 +288,12 @@ document.write("Last Published: " + docu
 <a href="api/solrj/index.html">SolrJ Javadoc</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>apidocs</em>
 </li>
 </ul>
+    
+<ul>
+<li>
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>apidocs</em>
+</li>
+</ul>
   
 </ul>
 </ul>

Modified: lucene/dev/branches/solr2452/solr/site/linkmap.pdf
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/linkmap.pdf?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
Binary files - no diff available.

Modified: lucene/dev/branches/solr2452/solr/site/mailing_lists.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/mailing_lists.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/mailing_lists.html (original)
+++ lucene/dev/branches/solr2452/solr/site/mailing_lists.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Resources</div>
 <div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">

Modified: lucene/dev/branches/solr2452/solr/site/skin/basic.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/skin/basic.css?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/skin/basic.css (original)
+++ lucene/dev/branches/solr2452/solr/site/skin/basic.css Sun May 22 21:45:19 2011
@@ -163,4 +163,4 @@ p {
 .codefrag {
   font-family: "Courier New", Courier, monospace;
   font-size: 110%;
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/solr2452/solr/site/skin/print.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/skin/print.css?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/skin/print.css (original)
+++ lucene/dev/branches/solr2452/solr/site/skin/print.css Sun May 22 21:45:19 2011
@@ -51,4 +51,4 @@ a:link, a:visited {
 
 acronym {
   border: 0;
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/solr2452/solr/site/skin/profile.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/skin/profile.css?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/skin/profile.css (original)
+++ lucene/dev/branches/solr2452/solr/site/skin/profile.css Sun May 22 21:45:19 2011
@@ -172,4 +172,4 @@ a:hover { color:#6587ff} 
     }
       
     
-  
\ No newline at end of file
+  

Modified: lucene/dev/branches/solr2452/solr/site/skin/screen.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/skin/screen.css?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/skin/screen.css (original)
+++ lucene/dev/branches/solr2452/solr/site/skin/screen.css Sun May 22 21:45:19 2011
@@ -584,4 +584,4 @@ p.instruction {
   list-style-image: url('../images/instruction_arrow.png');
   list-style-position: outside;
   margin-left: 2em;
-} 
\ No newline at end of file
+} 

Modified: lucene/dev/branches/solr2452/solr/site/tutorial.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/tutorial.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/tutorial.html (original)
+++ lucene/dev/branches/solr2452/solr/site/tutorial.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Resources</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/dev/branches/solr2452/solr/site/version_control.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/site/version_control.html?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/site/version_control.html (original)
+++ lucene/dev/branches/solr2452/solr/site/version_control.html Sun May 22 21:45:19 2011
@@ -130,6 +130,9 @@ document.write("Last Published: " + docu
 <div class="menuitem">
 <a href="api/solrj/index.html">SolrJ Javadoc</a>
 </div>
+<div class="menuitem">
+<a href="api/test-framework/index.html">Test Framework Javadoc</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Resources</div>
 <div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">

Modified: lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/SolrDocumentList.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/SolrDocumentList.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/SolrDocumentList.java (original)
+++ lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/SolrDocumentList.java Sun May 22 21:45:19 2011
@@ -61,7 +61,7 @@ public class SolrDocumentList extends Ar
   public String toString() {
     return "{numFound="+numFound
             +",start="+start
-            + (maxScore!=null ? ""+maxScore : "")
+            + (maxScore!=null ? ",maxScore="+maxScore : "")
             +",docs="+super.toString()
             +"}";
   }

Modified: lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/params/UpdateParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/params/UpdateParams.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/params/UpdateParams.java (original)
+++ lucene/dev/branches/solr2452/solr/src/common/org/apache/solr/common/params/UpdateParams.java Sun May 22 21:45:19 2011
@@ -43,8 +43,11 @@ public interface UpdateParams 
   /** Rollback update commands */
   public static String ROLLBACK = "rollback";
 
-  /** Select the update processor to use.  A RequestHandler may or may not respect this parameter */
-  public static final String UPDATE_PROCESSOR = "update.processor";
+  /** Select the update processor chain to use.  A RequestHandler may or may not respect this parameter */
+  public static final String UPDATE_CHAIN = "update.chain";
+  // TODO: Include the old deprecated param, for removal in Solr 4.0
+  public static final String UPDATE_CHAIN_DEPRECATED = "update.processor";
+
   /**
    * If optimizing, set the maximum number of segments left in the index after optimization.  1 is the default (and is equivalent to calling IndexWriter.optimize() in Lucene).
    */

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java Sun May 22 21:45:19 2011
@@ -21,6 +21,7 @@ import java.util.Map;
 
 import org.apache.lucene.analysis.Tokenizer;
 import org.apache.lucene.analysis.path.PathHierarchyTokenizer;
+import org.apache.lucene.analysis.path.ReversePathHierarchyTokenizer;
 
 
 /**
@@ -37,6 +38,8 @@ public class PathHierarchyTokenizerFacto
   
   private char delimiter;
   private char replacement;
+  private boolean reverse = false;
+  private int skip =  PathHierarchyTokenizer.DEFAULT_SKIP;
   
   /**
    * Require a configured pattern
@@ -70,10 +73,23 @@ public class PathHierarchyTokenizerFacto
     else{
       replacement = delimiter;
     }
+    
+    v = args.get( "reverse" );
+    if( v != null ){
+      reverse = "true".equals( v );
+    }
+
+    v = args.get( "skip" );
+    if( v != null ){
+      skip = Integer.parseInt( v );
+    }
   }
 
   public Tokenizer create(Reader input) {
-    return new PathHierarchyTokenizer(input, delimiter, replacement);
+    if( reverse ) {
+      return new ReversePathHierarchyTokenizer(input, delimiter, replacement, skip);
+    }
+    return new PathHierarchyTokenizer(input, delimiter, replacement, skip);
   }
 }
 

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java Sun May 22 21:45:19 2011
@@ -61,6 +61,16 @@ public class SynonymFilterFactory extend
       tokFactory = loadTokenizerFactory( loader, tf, args );
     }
 
+    Iterable<String> wlist=loadRules( synonyms, loader );
+    
+    synMap = new SynonymMap(ignoreCase);
+    parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+  }
+  
+  /**
+   * @return a list of all rules
+   */
+  protected Iterable<String> loadRules( String synonyms, ResourceLoader loader ) {
     List<String> wlist=null;
     try {
       File synonymFile = new File(synonyms);
@@ -77,13 +87,12 @@ public class SynonymFilterFactory extend
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
-    synMap = new SynonymMap(ignoreCase);
-    parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+    return wlist;
   }
 
   private SynonymMap synMap;
 
-  static void parseRules(List<String> rules, SynonymMap map, String mappingSep,
+  static void parseRules(Iterable<String> rules, SynonymMap map, String mappingSep,
     String synSep, boolean expansion, TokenizerFactory tokFactory) {
     int count=0;
     for (String rule : rules) {

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java Sun May 22 21:45:19 2011
@@ -23,7 +23,7 @@ import org.apache.solr.search.SolrIndexS
 
 /**
  */
-class AbstractSolrEventListener implements SolrEventListener {
+public class AbstractSolrEventListener implements SolrEventListener {
   protected final SolrCore core;
   public AbstractSolrEventListener(SolrCore core) {
     this.core = core;

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/CoreContainer.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/CoreContainer.java Sun May 22 21:45:19 2011
@@ -79,6 +79,7 @@ public class CoreContainer 
   protected Map<String ,IndexSchema> indexSchemaCache;
   protected String adminHandler;
   protected boolean shareSchema;
+  protected Integer zkClientTimeout;
   protected String solrHome;
   protected String defaultCoreName = "";
   private ZkController zkController;
@@ -313,7 +314,7 @@ public class CoreContainer 
     zkHost = cfg.get("solr/@zkHost" , null);
     adminPath = cfg.get("solr/cores/@adminPath", null);
     shareSchema = cfg.getBool("solr/cores/@shareSchema", false);
-    int zkClientTimeout = cfg.getInt("solr/cores/@zkClientTimeout", 10000);
+    zkClientTimeout = cfg.getInt("solr/cores/@zkClientTimeout", 10000);
 
     hostPort = System.getProperty("hostPort");
     if (hostPort == null) {
@@ -500,7 +501,12 @@ public class CoreContainer 
     SolrCore old = null;
     synchronized (cores) {
       old = cores.put(name, core);
+      /*
+      * set both the name of the descriptor and the name of the
+      * core, since the descriptors name is used for persisting.
+      */
       core.setName(name);
+      core.getCoreDescriptor().name = name;
     }
 
     if (zkController != null) {
@@ -884,6 +890,7 @@ public class CoreContainer 
     if (this.libDir != null) {
       writeAttribute(w,"sharedLib",libDir);
     }
+    if(zkHost != null) writeAttribute(w, "zkHost", zkHost);
     writeAttribute(w,"persistent",isPersistent());
     w.write(">\n");
 
@@ -892,9 +899,13 @@ public class CoreContainer 
     }
     w.write("  <cores");
     writeAttribute(w, "adminPath",adminPath);
-    if(adminHandler != null) writeAttribute(w, "adminHandler",adminHandler);
-    if(shareSchema) writeAttribute(w, "shareSchema","true");
-    if(!defaultCoreName.equals("")) writeAttribute(w, "defaultCoreName",defaultCoreName);
+    if(adminHandler != null) writeAttribute(w, "adminHandler", adminHandler);
+    if(shareSchema) writeAttribute(w, "shareSchema", "true");
+    if(!defaultCoreName.equals("")) writeAttribute(w, "defaultCoreName", defaultCoreName);
+    if(host != null) writeAttribute(w, "host", host);
+    if(hostPort != null) writeAttribute(w, "hostPort", hostPort);
+    if(zkClientTimeout != null) writeAttribute(w, "zkClientTimeout", zkClientTimeout);
+    if(hostContext != null) writeAttribute(w, "hostContext", hostContext);
     w.write(">\n");
 
     synchronized(cores) {

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/QuerySenderListener.java Sun May 22 21:45:19 2011
@@ -32,7 +32,7 @@ import java.util.List;
 /**
  * @version $Id$
  */
-class QuerySenderListener extends AbstractSolrEventListener {
+public class QuerySenderListener extends AbstractSolrEventListener {
   public QuerySenderListener(SolrCore core) {
     super(core);
   }

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/SolrConfig.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/core/SolrConfig.java Sun May 22 21:45:19 2011
@@ -57,7 +57,6 @@ import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.io.FileFilter;
 import java.io.IOException;
-import java.io.InputStream;
 
 
 /**
@@ -130,12 +129,12 @@ public class SolrConfig extends Config {
   throws ParserConfigurationException, IOException, SAXException {
     super(loader, name, is, "/config/");
     initLibs();
+    luceneMatchVersion = getLuceneVersion("luceneMatchVersion");
     defaultIndexConfig = new SolrIndexConfig(this, null, null);
     mainIndexConfig = new SolrIndexConfig(this, "mainIndex", defaultIndexConfig);
     reopenReaders = getBool("mainIndex/reopenReaders", true);
     
     booleanQueryMaxClauseCount = getInt("query/maxBooleanClauses", BooleanQuery.getMaxClauseCount());
-    luceneMatchVersion = getLuceneVersion("luceneMatchVersion");
     log.info("Using Lucene MatchVersion: " + luceneMatchVersion);
 
     filtOptEnabled = getBool("query/boolTofilterOptimizer/@enabled", false);

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java Sun May 22 21:45:19 2011
@@ -337,6 +337,7 @@ public abstract class AnalysisRequestHan
     @Override
     public boolean incrementToken() throws IOException {
       if (tokenIterator.hasNext()) {
+        clearAttributes();
         AttributeSource next = tokenIterator.next();
         Iterator<Class<? extends Attribute>> atts = next.getAttributeClassesIterator();
         while (atts.hasNext()) // make sure all att impls in the token exist here

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java Sun May 22 21:45:19 2011
@@ -24,6 +24,8 @@ import org.apache.solr.request.SolrQuery
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessorChain;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -31,12 +33,22 @@ import org.apache.solr.update.processor.
  *
  **/
 public abstract class ContentStreamHandlerBase extends RequestHandlerBase {
+  public static Logger log = LoggerFactory.getLogger(XmlUpdateRequestHandler.class);
 
   @Override
   public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
     SolrParams params = req.getParams();
+    String updateChainName = null;
+    if(params.get(UpdateParams.UPDATE_CHAIN_DEPRECATED) != null) {
+    	log.warn("Use of deprecated update request parameter "+UpdateParams.UPDATE_CHAIN_DEPRECATED+
+    			 " detected. Please use the new parameter "+UpdateParams.UPDATE_CHAIN+" instead, as support"+
+    			 " for "+UpdateParams.UPDATE_CHAIN_DEPRECATED+" will be removed in a later version.");
+    	updateChainName = params.get(UpdateParams.UPDATE_CHAIN_DEPRECATED);
+    } else {
+    	updateChainName = params.get(UpdateParams.UPDATE_CHAIN);
+    }
     UpdateRequestProcessorChain processorChain =
-            req.getCore().getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+            req.getCore().getUpdateProcessingChain(updateChainName);
 
     UpdateRequestProcessor processor = processorChain.createProcessor(req, rsp);
 

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonLoader.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonLoader.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonLoader.java Sun May 22 21:45:19 2011
@@ -23,6 +23,7 @@ import java.util.Stack;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.noggit.JSONParser;
+import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.SolrInputField;
 import org.apache.solr.common.util.ContentStream;
@@ -43,10 +44,18 @@ import org.slf4j.LoggerFactory;
 class JsonLoader extends ContentStreamLoader {
   final static Logger log = LoggerFactory.getLogger( JsonLoader.class );
   
-  protected UpdateRequestProcessor processor;
+  protected final UpdateRequestProcessor processor;
+  protected final SolrQueryRequest req;
+  protected JSONParser parser;
+  protected final int commitWithin;
+  protected final boolean overwrite;
 
-  public JsonLoader(UpdateRequestProcessor processor) {
+  public JsonLoader(SolrQueryRequest req, UpdateRequestProcessor processor) {
     this.processor = processor;
+    this.req = req;
+
+    commitWithin = req.getParams().getInt(XmlUpdateRequestHandler.COMMIT_WITHIN, -1);
+    overwrite = req.getParams().getBool(XmlUpdateRequestHandler.OVERWRITE, true);
   }
 
   @Override
@@ -55,14 +64,14 @@ class JsonLoader extends ContentStreamLo
     Reader reader = null;
     try {
       reader = stream.getReader();
-      if (XmlUpdateRequestHandler.log.isTraceEnabled()) {
+      if (log.isTraceEnabled()) {
         String body = IOUtils.toString(reader);
-        XmlUpdateRequestHandler.log.trace("body", body);
+        log.trace("body", body);
         reader = new StringReader(body);
       }
 
-      JSONParser parser = new JSONParser(reader);
-      this.processUpdate(req, processor, parser);
+      parser = new JSONParser(reader);
+      this.processUpdate();
     }
     finally {
       IOUtils.closeQuietly(reader);
@@ -70,39 +79,50 @@ class JsonLoader extends ContentStreamLo
   }
 
   @SuppressWarnings("fallthrough")
-  void processUpdate(SolrQueryRequest req, UpdateRequestProcessor processor, JSONParser parser) throws IOException 
+  void processUpdate() throws IOException
   {
     int ev = parser.nextEvent();
     while( ev != JSONParser.EOF ) {
       
       switch( ev )
       {
+        case JSONParser.ARRAY_START:
+          handleAdds();
+          break;
+
       case JSONParser.STRING:
         if( parser.wasKey() ) {
           String v = parser.getString();
           if( v.equals( XmlUpdateRequestHandler.ADD ) ) {
-            processor.processAdd( parseAdd(req, parser ) );
+            int ev2 = parser.nextEvent();
+            if (ev2 == JSONParser.OBJECT_START) {
+              processor.processAdd( parseAdd() );
+            } else if (ev2 == JSONParser.ARRAY_START) {
+              handleAdds();
+            } else {
+              assertEvent(ev2, JSONParser.OBJECT_START);
+            }
           }
           else if( v.equals( XmlUpdateRequestHandler.COMMIT ) ) {
             CommitUpdateCommand cmd = new CommitUpdateCommand(req,  false );
             cmd.waitFlush = cmd.waitSearcher = true;
-            parseCommitOptions( parser, cmd );
+            parseCommitOptions( cmd );
             processor.processCommit( cmd );
           }
           else if( v.equals( XmlUpdateRequestHandler.OPTIMIZE ) ) {
             CommitUpdateCommand cmd = new CommitUpdateCommand(req, true );
             cmd.waitFlush = cmd.waitSearcher = true;
-            parseCommitOptions( parser, cmd );
+            parseCommitOptions( cmd );
             processor.processCommit( cmd );
           }
           else if( v.equals( XmlUpdateRequestHandler.DELETE ) ) {
-            processor.processDelete( parseDelete(req, parser ) );
+            processor.processDelete( parseDelete() );
           }
           else if( v.equals( XmlUpdateRequestHandler.ROLLBACK ) ) {
-            processor.processRollback( parseRollback(req, parser ) );
+            processor.processRollback( parseRollback() );
           }
           else {
-            throw new IOException( "Unknown command: "+v+" ["+parser.getPosition()+"]" );
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown command: "+v+" ["+parser.getPosition()+"]" );
           }
           break;
         }
@@ -117,12 +137,11 @@ class JsonLoader extends ContentStreamLo
         
       case JSONParser.OBJECT_START:
       case JSONParser.OBJECT_END:
-      case JSONParser.ARRAY_START:
       case JSONParser.ARRAY_END:
         break;
         
       default:
-        System.out.println("UNKNOWN_EVENT_ID:"+ev);
+        log.info("Noggit UNKNOWN_EVENT_ID:"+ev);
         break;
       }
       // read the next event
@@ -130,187 +149,211 @@ class JsonLoader extends ContentStreamLo
     }
   }
 
-  DeleteUpdateCommand parseDelete(SolrQueryRequest req, JSONParser js) throws IOException {
-    assertNextEvent( js, JSONParser.OBJECT_START );
+  DeleteUpdateCommand parseDelete() throws IOException {
+    assertNextEvent( JSONParser.OBJECT_START );
 
     DeleteUpdateCommand cmd = new DeleteUpdateCommand(req);
-    
+
     while( true ) {
-      int ev = js.nextEvent();
+      int ev = parser.nextEvent();
       if( ev == JSONParser.STRING ) {
-        String key = js.getString();
-        if( js.wasKey() ) {
+        String key = parser.getString();
+        if( parser.wasKey() ) {
           if( "id".equals( key ) ) {
-            cmd.id = js.getString();
+            cmd.id = parser.getString();
           }
           else if( "query".equals(key) ) {
-            cmd.query = js.getString();
+            cmd.query = parser.getString();
           }
           else {
-            throw new IOException( "Unknown key: "+key+" ["+js.getPosition()+"]" );
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key: "+key+" ["+parser.getPosition()+"]" );
           }
         }
         else {
-          throw new IOException( 
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
               "invalid string: " + key 
-              +" at ["+js.getPosition()+"]" );
+              +" at ["+parser.getPosition()+"]" );
         }
       }
       else if( ev == JSONParser.OBJECT_END ) {
         if( cmd.id == null && cmd.query == null ) {
-          throw new IOException( "Missing id or query for delete ["+js.getPosition()+"]" );          
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Missing id or query for delete ["+parser.getPosition()+"]" );
         }
         return cmd;
       }
       else {
-        throw new IOException( 
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
             "Got: "+JSONParser.getEventString( ev  )
-            +" at ["+js.getPosition()+"]" );
+            +" at ["+parser.getPosition()+"]" );
       }
     }
   }
   
-  RollbackUpdateCommand parseRollback(SolrQueryRequest req, JSONParser js) throws IOException {
-    assertNextEvent( js, JSONParser.OBJECT_START );
-    assertNextEvent( js, JSONParser.OBJECT_END );
+  RollbackUpdateCommand parseRollback() throws IOException {
+    assertNextEvent( JSONParser.OBJECT_START );
+    assertNextEvent( JSONParser.OBJECT_END );
     return new RollbackUpdateCommand(req);
   }
 
-  void parseCommitOptions( JSONParser js, CommitUpdateCommand cmd ) throws IOException
+  void parseCommitOptions(CommitUpdateCommand cmd ) throws IOException
   {
-    assertNextEvent( js, JSONParser.OBJECT_START );
+    assertNextEvent( JSONParser.OBJECT_START );
 
     while( true ) {
-      int ev = js.nextEvent();
+      int ev = parser.nextEvent();
       if( ev == JSONParser.STRING ) {
-        String key = js.getString();
-        if( js.wasKey() ) {
+        String key = parser.getString();
+        if( parser.wasKey() ) {
           if( XmlUpdateRequestHandler.WAIT_SEARCHER.equals( key ) ) {
-            cmd.waitSearcher = js.getBoolean();
+            cmd.waitSearcher = parser.getBoolean();
           }
           else if( XmlUpdateRequestHandler.WAIT_FLUSH.equals( key ) ) {
-            cmd.waitFlush = js.getBoolean();
+            cmd.waitFlush = parser.getBoolean();
           }
           else {
-            throw new IOException( "Unknown key: "+key+" ["+js.getPosition()+"]" );
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key: "+key+" ["+parser.getPosition()+"]" );
           }
         }
         else {
-          throw new IOException( 
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
               "invalid string: " + key 
-              +" at ["+js.getPosition()+"]" );
+              +" at ["+parser.getPosition()+"]" );
         }
       }
       else if( ev == JSONParser.OBJECT_END ) {
         return;
       }
       else {
-        throw new IOException( 
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
             "Got: "+JSONParser.getEventString( ev  )
-            +" at ["+js.getPosition()+"]" );
+            +" at ["+parser.getPosition()+"]" );
       }
     }
   }
   
-  AddUpdateCommand parseAdd(SolrQueryRequest req, JSONParser js ) throws IOException
+  AddUpdateCommand parseAdd() throws IOException
   {
-    assertNextEvent( js, JSONParser.OBJECT_START );
     AddUpdateCommand cmd = new AddUpdateCommand(req);
+    cmd.commitWithin = commitWithin;
+    cmd.overwrite = overwrite;
+
     float boost = 1.0f;
     
     while( true ) {
-      int ev = js.nextEvent();
+      int ev = parser.nextEvent();
       if( ev == JSONParser.STRING ) {
-        if( js.wasKey() ) {
-          String key = js.getString();
+        if( parser.wasKey() ) {
+          String key = parser.getString();
           if( "doc".equals( key ) ) {
             if( cmd.solrDoc != null ) {
-              throw new IOException( "multiple docs in same add command" );
+              throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "multiple docs in same add command" );
             }
-            ev = assertNextEvent( js, JSONParser.OBJECT_START );
-            cmd.solrDoc = parseDoc( ev, js );
+            ev = assertNextEvent( JSONParser.OBJECT_START );
+            cmd.solrDoc = parseDoc( ev );
           }
           else if( XmlUpdateRequestHandler.OVERWRITE.equals( key ) ) {
-            cmd.overwrite = js.getBoolean(); // reads next boolean
+            cmd.overwrite = parser.getBoolean(); // reads next boolean
           }
           else if( XmlUpdateRequestHandler.COMMIT_WITHIN.equals( key ) ) {
-            cmd.commitWithin = (int)js.getLong(); 
+            cmd.commitWithin = (int)parser.getLong();
           }
           else if( "boost".equals( key ) ) {
-            boost = Float.parseFloat( js.getNumberChars().toString() ); 
+            boost = Float.parseFloat( parser.getNumberChars().toString() );
           }
           else {
-            throw new IOException( "Unknown key: "+key+" ["+js.getPosition()+"]" );
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key: "+key+" ["+parser.getPosition()+"]" );
           }
         }
         else {
-          throw new IOException( 
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
               "Should be a key "
-              +" at ["+js.getPosition()+"]" );
+              +" at ["+parser.getPosition()+"]" );
         }
       }
       else if( ev == JSONParser.OBJECT_END ) {
         if( cmd.solrDoc == null ) {
-          throw new IOException("missing solr document. "+js.getPosition() );
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,"missing solr document. "+parser.getPosition() );
         }
         cmd.solrDoc.setDocumentBoost( boost ); 
         return cmd;
       }
       else {
-        throw new IOException( 
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
             "Got: "+JSONParser.getEventString( ev  )
-            +" at ["+js.getPosition()+"]" );
+            +" at ["+parser.getPosition()+"]" );
       }
     }
   }
-  
-  int assertNextEvent( JSONParser parser, int ev ) throws IOException
+
+
+  void handleAdds() throws IOException
+  {
+    while( true ) {
+      AddUpdateCommand cmd = new AddUpdateCommand(req);
+      cmd.commitWithin = commitWithin;
+      cmd.overwrite = overwrite;
+
+      int ev = parser.nextEvent();
+      if (ev == JSONParser.ARRAY_END) break;
+
+      assertEvent(ev, JSONParser.OBJECT_START);
+      cmd.solrDoc = parseDoc(ev);
+      processor.processAdd(cmd);
+    }
+  }
+
+
+  int assertNextEvent(int expected ) throws IOException
   {
     int got = parser.nextEvent();
-    if( ev != got ) {
-      throw new IOException( 
-          "Expected: "+JSONParser.getEventString( ev  )
-          +" but got "+JSONParser.getEventString( got )
+    assertEvent(got, expected);
+    return got;
+  }
+
+  void assertEvent(int ev, int expected) {
+    if( ev != expected ) {
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+          "Expected: "+JSONParser.getEventString( expected  )
+          +" but got "+JSONParser.getEventString( ev )
           +" at ["+parser.getPosition()+"]" );
     }
-    return got;
   }
   
-  SolrInputDocument parseDoc( int ev, JSONParser js ) throws IOException
+  SolrInputDocument parseDoc(int ev) throws IOException
   {
     Stack<Object> stack = new Stack<Object>();
     Object obj = null;
     boolean inArray = false;
     
     if( ev != JSONParser.OBJECT_START ) {
-      throw new IOException( "object should already be started" );
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "object should already be started" );
     }
     
     while( true ) {
-      //System.out.println( ev + "["+JSONParser.getEventString(ev)+"] "+js.wasKey() ); //+ js.getString() );
+      //System.out.println( ev + "["+JSONParser.getEventString(ev)+"] "+parser.wasKey() ); //+ parser.getString() );
 
       switch (ev) {
         case JSONParser.STRING:
-          if( js.wasKey() ) {
+          if( parser.wasKey() ) {
             obj = stack.peek();
-            String v = js.getString();
+            String v = parser.getString();
             if( obj instanceof SolrInputField ) {
               SolrInputField field = (SolrInputField)obj;
               if( "boost".equals( v ) ) {
-                ev = js.nextEvent();
+                ev = parser.nextEvent();
                 if( ev != JSONParser.NUMBER &&
                     ev != JSONParser.LONG &&  
                     ev != JSONParser.BIGNUMBER ) {
-                  throw new IOException( "boost should have number! "+JSONParser.getEventString(ev) );
+                  throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "boost should have number! "+JSONParser.getEventString(ev) );
                 }
-                field.setBoost( Float.valueOf( js.getNumberChars().toString() ) );
+                field.setBoost( Float.valueOf( parser.getNumberChars().toString() ) );
               }
               else if( "value".equals( v  ) ) {
                 // nothing special...
                 stack.push( field ); // so it can be popped
               }
               else {
-                throw new IOException( "invalid key: "+v + " ["+js.getPosition()+"]" );
+                throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "invalid key: "+v + " ["+ parser.getPosition()+"]" );
               }
             }
             else if( obj instanceof SolrInputDocument ) {
@@ -323,22 +366,22 @@ class JsonLoader extends ContentStreamLo
               stack.push( f );
             }
             else {
-              throw new IOException( "hymmm ["+js.getPosition()+"]" );
+              throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "hymmm ["+ parser.getPosition()+"]" );
             }
           }
           else {
-            addValToField(stack, js.getString(), inArray, js);
+            addValToField(stack, parser.getString(), inArray, parser);
           }
           break;
 
         case JSONParser.LONG:
         case JSONParser.NUMBER:
         case JSONParser.BIGNUMBER:
-          addValToField(stack, js.getNumberChars().toString(), inArray, js);
+          addValToField(stack, parser.getNumberChars().toString(), inArray, parser);
           break;
           
         case JSONParser.BOOLEAN:
-          addValToField(stack, js.getBoolean(),inArray, js);
+          addValToField(stack, parser.getBoolean(),inArray, parser);
           break;
           
         case JSONParser.OBJECT_START:
@@ -351,7 +394,7 @@ class JsonLoader extends ContentStreamLo
               // should alreay be pushed...
             }
             else {
-              throw new IOException( "should not start new object with: "+obj + " ["+js.getPosition()+"]" );
+              throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "should not start new object with: "+obj + " ["+ parser.getPosition()+"]" );
             }
           }
           break;
@@ -365,7 +408,7 @@ class JsonLoader extends ContentStreamLo
             // should already be pushed...
           }
           else {
-            throw new IOException( "should not start new object with: "+obj + " ["+js.getPosition()+"]" );
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "should not start new object with: "+obj + " ["+ parser.getPosition()+"]" );
           }
           break;
 
@@ -383,18 +426,18 @@ class JsonLoader extends ContentStreamLo
           break;
       }
 
-      ev = js.nextEvent();
+      ev = parser.nextEvent();
       if( ev == JSONParser.EOF ) {
-        throw new IOException( "should finish doc first!" );
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "should finish doc first!" );
       }
     }
   }
   
-  static void addValToField( Stack stack, Object val, boolean inArray, JSONParser js ) throws IOException
+  static void addValToField( Stack stack, Object val, boolean inArray, JSONParser parser ) throws IOException
   {
     Object obj = stack.peek();
     if( !(obj instanceof SolrInputField) ) {
-      throw new IOException( "hymmm ["+js.getPosition()+"]" );
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "hymmm ["+parser.getPosition()+"]" );
     }
     
     SolrInputField f = inArray

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonUpdateRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonUpdateRequestHandler.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonUpdateRequestHandler.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/JsonUpdateRequestHandler.java Sun May 22 21:45:19 2011
@@ -37,7 +37,7 @@ public class JsonUpdateRequestHandler ex
 
   @Override
   protected ContentStreamLoader newLoader(SolrQueryRequest req, UpdateRequestProcessor processor) {
-    return new JsonLoader(processor);
+    return new JsonLoader(req, processor);
   }
 
   //////////////////////// SolrInfoMBeans methods //////////////////////

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/ReplicationHandler.java Sun May 22 21:45:19 2011
@@ -843,9 +843,13 @@ public class ReplicationHandler extends 
                 indexCommitPoint = reader.getIndexCommit();
               }
             } finally {
+              // We don't need to save commit points for replication, the SolrDeletionPolicy
+              // always saves the last commit point (and the last optimized commit point, if needed)
+              /***
               if(indexCommitPoint != null){
                 core.getDeletionPolicy().saveCommitPoint(indexCommitPoint.getVersion());
               }
+              ***/
             }
           }
           if (core.getUpdateHandler() instanceof DirectUpdateHandler2) {

Modified: lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1126234&r1=1126233&r2=1126234&view=diff
==============================================================================
--- lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/solr2452/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Sun May 22 21:45:19 2011
@@ -190,7 +190,7 @@ public class CoreAdminHandler extends Re
         }
 
         UpdateRequestProcessorChain processorChain =
-                core.getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+                core.getUpdateProcessingChain(params.get(UpdateParams.UPDATE_CHAIN));
         wrappedReq = new LocalSolrQueryRequest(core, req.getParams());
         UpdateRequestProcessor processor =
                 processorChain.createProcessor(wrappedReq, rsp);