You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2011/03/02 23:44:43 UTC

svn commit: r1076444 - in /lucene/dev/branches/branch_3x/solr: ./ src/java/org/apache/solr/schema/ src/test-files/solr/conf/ src/test/org/apache/solr/schema/

Author: hossman
Date: Wed Mar  2 22:44:43 2011
New Revision: 1076444

URL: http://svn.apache.org/viewvc?rev=1076444&view=rev
Log:
SOLR-309: merge 1076432 from trunk - Fix FieldType so setting an analyzer on a FieldType that doesn't expect it will generate an error

Modified:
    lucene/dev/branches/branch_3x/solr/   (props changed)
    lucene/dev/branches/branch_3x/solr/CHANGES.txt
    lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/FieldType.java
    lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/TextField.java
    lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/bad-schema.xml
    lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java

Modified: lucene/dev/branches/branch_3x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/CHANGES.txt?rev=1076444&r1=1076443&r2=1076444&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/solr/CHANGES.txt Wed Mar  2 22:44:43 2011
@@ -549,6 +549,11 @@ Bug Fixes
   your config files / XSLTs and replace all XIncludes/HREFs that were 
   hacked to use absolute paths to use relative ones. (uschindler)
 
+* SOLR-309: Fix FieldType so setting an analyzer on a FieldType that
+  doesn't expect it will generate an error.  Practically speaking this
+  means that Solr will now correctly generate an error on
+  initialization if the schema.xml contains an analyzer configuration
+  for a fieldType that does not use TextField.  (hossman) 
 
 Other Changes
 ----------------------

Modified: lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/FieldType.java?rev=1076444&r1=1076443&r2=1076444&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/FieldType.java Wed Mar  2 22:44:43 2011
@@ -36,6 +36,7 @@ import org.apache.solr.response.TextResp
 import org.apache.solr.response.XMLWriter;
 import org.apache.solr.analysis.SolrAnalyzer;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import java.util.Map;
@@ -397,6 +398,7 @@ public abstract class FieldType extends 
    * of this type, subclasses can set analyzer themselves or override
    * getAnalyzer()
    * @see #getAnalyzer
+   * @see #setAnalyzer
    */
   protected Analyzer analyzer=new DefaultAnalyzer(256);
 
@@ -405,6 +407,7 @@ public abstract class FieldType extends 
    * of this type, subclasses can set analyzer themselves or override
    * getAnalyzer()
    * @see #getQueryAnalyzer
+   * @see #setQueryAnalyzer
    */
   protected Analyzer queryAnalyzer=analyzer;
 
@@ -430,22 +433,52 @@ public abstract class FieldType extends 
     return queryAnalyzer;
   }
 
+  private final String analyzerError = 
+    "FieldType: " + this.getClass().getSimpleName() + 
+    " (" + typeName + ") does not support specifying an analyzer";
+
   /**
    * Sets the Analyzer to be used when indexing fields of this type.
+   *
+   * <p>
+   * The default implementation throws a SolrException.  
+   * Subclasses that override this method need to ensure the behavior 
+   * of the analyzer is consistent with the implementation of toInternal.
+   * </p>
+   * 
+   * @see #toInternal
+   * @see #setQueryAnalyzer
    * @see #getAnalyzer
    */
   public void setAnalyzer(Analyzer analyzer) {
-    this.analyzer = analyzer;
-    log.trace("FieldType: " + typeName + ".setAnalyzer(" + analyzer.getClass().getName() + ")" );
+    SolrException e = new SolrException
+      (ErrorCode.SERVER_ERROR,
+       "FieldType: " + this.getClass().getSimpleName() + 
+       " (" + typeName + ") does not support specifying an analyzer");
+    SolrException.logOnce(log,null,e);
+    throw e;
   }
 
   /**
    * Sets the Analyzer to be used when querying fields of this type.
+   *
+   * <p>
+   * The default implementation throws a SolrException.  
+   * Subclasses that override this method need to ensure the behavior 
+   * of the analyzer is consistent with the implementation of toInternal.
+   * </p>
+   * 
+   * @see #toInternal
+   * @see #setAnalyzer
    * @see #getQueryAnalyzer
    */
   public void setQueryAnalyzer(Analyzer analyzer) {
-    this.queryAnalyzer = analyzer;
-    log.trace("FieldType: " + typeName + ".setQueryAnalyzer(" + analyzer.getClass().getName() + ")" );
+    SolrException e = new SolrException
+      (ErrorCode.SERVER_ERROR,
+       "FieldType: " + this.getClass().getSimpleName() + 
+       " (" + typeName + ") does not support specifying an analyzer");
+    SolrException.logOnce(log,null,e);
+    throw e;
   }
 
   /**

Modified: lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/TextField.java?rev=1076444&r1=1076443&r2=1076444&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/schema/TextField.java Wed Mar  2 22:44:43 2011
@@ -83,6 +83,15 @@ public class TextField extends FieldType
     return parseFieldQuery(parser, getQueryAnalyzer(), field.getName(), externalVal);
   }
 
+  @Override
+  public void setAnalyzer(Analyzer analyzer) {
+    this.analyzer = analyzer;
+  }
+
+  @Override
+  public void setQueryAnalyzer(Analyzer analyzer) {
+    this.queryAnalyzer = analyzer;
+  }
 
   static Query parseFieldQuery(QParser parser, Analyzer analyzer, String field, String queryText) {
     int phraseSlop = 0;

Modified: lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/bad-schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/bad-schema.xml?rev=1076444&r1=1076443&r2=1076444&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/bad-schema.xml (original)
+++ lucene/dev/branches/branch_3x/solr/src/test-files/solr/conf/bad-schema.xml Wed Mar  2 22:44:43 2011
@@ -21,6 +21,12 @@
 
     <fieldType name="string" class="solr.StrField"/>
     
+    <fieldType name="bad_type" class="solr.StrField">
+      <analyzer>
+        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+      </analyzer>
+    </fieldType>
+
     <fieldType name="ftAgain" class="solr.IntField"/>
     <fieldType name="ftAgain" class="solr.IntField"/>
 

Modified: lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java?rev=1076444&r1=1076443&r2=1076444&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java Wed Mar  2 22:44:43 2011
@@ -17,17 +17,22 @@
 
 package org.apache.solr.schema;
 
+import java.util.regex.Pattern;
 import java.util.LinkedList;
 import java.util.List;
-import org.apache.solr.core.SolrConfig;
 
+import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.util.AbstractSolrTestCase;
 
+
+
 /**
  */
 public class BadIndexSchemaTest extends AbstractSolrTestCase {
 
+  private static final String bad_type = "StrField (bad_type)";
+
   @Override public String getSchemaFile() { return "bad-schema.xml"; }
   @Override public String getSolrConfigFile() { return "solrconfig.xml"; }
 
@@ -36,6 +41,7 @@ public class BadIndexSchemaTest extends 
     ignoreException("_twice");
     ignoreException("ftAgain");
     ignoreException("fAgain");
+    ignoreException(Pattern.quote(bad_type));
 
     super.setUp();
   }
@@ -58,7 +64,7 @@ public class BadIndexSchemaTest extends 
   }
   
   
-  public void testSevereErrorsForDuplicateNames() 
+  public void testSevereErrors() 
   {
     SolrCore core = h.getCore();
     IndexSchema schema = core.getSchema();
@@ -67,7 +73,7 @@ public class BadIndexSchemaTest extends 
       log.info( "got ex:"+t.getMessage() );
     }
     
-    assertEquals( 3, SolrConfig.severeErrors.size() );
+    assertEquals( 4, SolrConfig.severeErrors.size() );
 
     List<Throwable> err = new LinkedList<Throwable>();
     err.addAll( SolrConfig.severeErrors );
@@ -84,6 +90,10 @@ public class BadIndexSchemaTest extends 
     assertNotNull( t );
     err.remove( t );
 
+    t = findErrorWithSubstring( err, bad_type );
+    assertNotNull( t );
+    err.remove( t );
+
     // make sure thats all of them
     assertTrue( err.isEmpty() );
   }