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:14:18 UTC

svn commit: r1076432 - in /lucene/dev/trunk/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:14:17 2011
New Revision: 1076432

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

Added:
    lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-nontext-analyzer.xml
      - copied, changed from r1075932, lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-dup-field.xml
Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/src/java/org/apache/solr/schema/FieldType.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TextField.java
    lucene/dev/trunk/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1076432&r1=1076431&r2=1076432&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Mar  2 22:14:17 2011
@@ -153,6 +153,11 @@ Bug Fixes
 * SOLR-2275: fix DisMax 'mm' parsing to be tolerant of whitespace
   (Erick Erickson via hossman)
 
+* 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/trunk/solr/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/schema/FieldType.java?rev=1076432&r1=1076431&r2=1076432&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/schema/FieldType.java Wed Mar  2 22:14:17 2011
@@ -33,6 +33,7 @@ import org.apache.lucene.util.UnicodeUti
 import org.apache.noggit.CharArr;
 import org.apache.solr.analysis.SolrAnalyzer;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.Sorting;
@@ -418,6 +419,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);
 
@@ -426,6 +428,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;
 
@@ -451,22 +454,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/trunk/solr/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TextField.java?rev=1076432&r1=1076431&r2=1076432&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TextField.java Wed Mar  2 22:14:17 2011
@@ -84,6 +84,15 @@ public class TextField extends FieldType
     return ByteUtils.UTF8toUTF16(term);
   }
 
+  @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;

Copied: lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-nontext-analyzer.xml (from r1075932, lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-dup-field.xml)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-nontext-analyzer.xml?p2=lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-nontext-analyzer.xml&p1=lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-dup-field.xml&r1=1075932&r2=1076432&rev=1076432&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-dup-field.xml (original)
+++ lucene/dev/trunk/solr/src/test-files/solr/conf/bad-schema-nontext-analyzer.xml Wed Mar  2 22:14:17 2011
@@ -16,25 +16,21 @@
  limitations under the License.
 -->
 
-<schema name="bad-schema-dup-field" version="1.0">
+<schema name="bad-schema-nontext-analyzer" version="1.0">
   <types>
-    <fieldType name="string" class="solr.StrField"/>
-    <fieldtype name="text" class="solr.TextField" />
+    <!-- BEGIN BAD STUFF -->
+    <fieldType name="bad_type" class="solr.StrField">
+      <analyzer>
+        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+      </analyzer>
+    </fieldType>
+    <!-- END BAD STUFF -->
  </types>
 
 
  <fields>
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="false"/>
    
-   <field name="signatureField" type="string" indexed="true" stored="false"/>
-
-   <!-- BEGIN BAD STUFF -->
-   <field name="fAgain" type="text" indexed="true" stored="true"/>
-   <field name="fAgain" type="text" indexed="true" stored="true"/>
-   <!-- END BAD STUFF -->
-
-   <dynamicField name="*_sS" type="string"  indexed="false" stored="true"/>
-
  </fields>
 
  <defaultSearchField>id</defaultSearchField>

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java?rev=1076432&r1=1076431&r2=1076432&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java Wed Mar  2 22:14:17 2011
@@ -22,6 +22,8 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.core.SolrConfig;
 
+import java.util.regex.Pattern;
+
 import org.junit.Test;
 
 public class BadIndexSchemaTest extends SolrTestCaseJ4 {
@@ -29,7 +31,7 @@ public class BadIndexSchemaTest extends 
   private void doTest(final String schema, final String errString) 
     throws Exception {
 
-    ignoreException(errString);
+    ignoreException(Pattern.quote(errString));
     try {
       initCore( "solrconfig.xml", schema );
     } catch (SolrException e) {
@@ -60,4 +62,9 @@ public class BadIndexSchemaTest extends 
   public void testSevereErrorsForDuplicateFieldType() throws Exception {
     doTest("bad-schema-dup-fieldType.xml", "ftAgain");
   }
+
+  @Test
+  public void testSevereErrorsForUnexpectedAnalyzer() throws Exception {
+    doTest("bad-schema-nontext-analyzer.xml", "StrField (bad_type)");
+  }
 }