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() );
}