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)");
+ }
}