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 2015/06/19 21:44:50 UTC
svn commit: r1686491 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java
core/src/java/org/apache/solr/schema/FieldType.java
core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
Author: sarowe
Date: Fri Jun 19 19:44:50 2015
New Revision: 1686491
URL: http://svn.apache.org/r1686491
Log:
SOLR-7679: Schema API doesn't take similarity attribute into account when adding field types
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1686491&r1=1686490&r2=1686491&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Fri Jun 19 19:44:50 2015
@@ -171,6 +171,9 @@ Bug Fixes
* SOLR-7697: Schema API doesn't take class or luceneMatchVersion attributes into
account for the analyzer when adding a new field type. (Marius Grama, Steve Rowe)
+
+* SOLR-7679: Schema API doesn't take similarity attribute into account when adding
+ field types. (Marius Grama, Steve Rowe)
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java?rev=1686491&r1=1686490&r2=1686491&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldTypeXmlAdapter.java Fri Jun 19 19:44:50 2015
@@ -65,9 +65,28 @@ public class FieldTypeXmlAdapter {
analyzer = transformAnalyzer(doc, json, "multiTermAnalyzer", "multiterm");
if (analyzer != null)
fieldType.appendChild(analyzer);
+
+ Element similarity = transformSimilarity(doc, json, "similarity");
+ if (similarity != null)
+ fieldType.appendChild(similarity);
return fieldType;
}
+
+ @SuppressWarnings("unchecked")
+ protected static Element transformSimilarity(Document doc, Map<String,?> json, String jsonFieldName) {
+ Object jsonField = json.get(jsonFieldName);
+ if (jsonField == null)
+ return null; // it's ok for this field to not exist in the JSON map
+
+ if (!(jsonField instanceof Map))
+ throw new SolrException(ErrorCode.BAD_REQUEST, "Invalid fieldType definition! Expected JSON object for "+
+ jsonFieldName+" not a "+jsonField.getClass().getName());
+
+ Element similarity = doc.createElement("similarity");
+ appendAttrs(similarity, (Map<String,?>)jsonField);
+ return similarity;
+ }
@SuppressWarnings("unchecked")
protected static Element transformAnalyzer(Document doc, Map<String,?> json, String jsonFieldName, String analyzerType) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java?rev=1686491&r1=1686490&r2=1686491&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java Fri Jun 19 19:44:50 2015
@@ -820,9 +820,6 @@ public abstract class FieldType extends
namedPropertyValues.add(getPropertyName(TOKENIZED), isTokenized());
// The BINARY property is always false
// namedPropertyValues.add(getPropertyName(BINARY), hasProperty(BINARY));
- if (null != getSimilarityFactory()) {
- namedPropertyValues.add(SIMILARITY, getSimilarityFactory().getNamedPropertyValues());
- }
if (null != getPostingsFormat()) {
namedPropertyValues.add(POSTINGS_FORMAT, getPostingsFormat());
}
@@ -843,6 +840,10 @@ public abstract class FieldType extends
}
}
}
+
+ if (null != getSimilarityFactory()) {
+ namedPropertyValues.add(SIMILARITY, getSimilarityFactory().getNamedPropertyValues());
+ }
if (isExplicitAnalyzer()) {
String analyzerProperty = isExplicitQueryAnalyzer() ? INDEX_ANALYZER : ANALYZER;
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java?rev=1686491&r1=1686490&r2=1686491&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java Fri Jun 19 19:44:50 2015
@@ -263,6 +263,18 @@ public class TestBulkSchemaAPI extends R
" 'type': 'myWhitespaceTxtField',\n" +
" 'stored':true\n" +
" },\n" +
+ " 'add-field-type' : {" +
+ " 'name' : 'mySimField',\n" +
+ " 'class':'solr.TextField',\n" +
+ " 'analyzer' : {'tokenizer':{'class':'solr.WhitespaceTokenizerFactory'}},\n" +
+ " 'similarity' : {'class':'org.apache.lucene.misc.SweetSpotSimilarity'}\n" +
+ " },\n"+
+ " 'add-field' : {\n" +
+ " 'name':'a4',\n" +
+ " 'type': 'mySimField',\n" +
+ " 'stored':true,\n" +
+ " 'indexed':true\n" +
+ " },\n" +
" 'delete-field' : {'name':'wdf_nocase'},\n" +
" 'delete-field-type' : {'name':'wdf_nocase'},\n" +
" 'delete-dynamic-field' : {'name':'*_tt'},\n" +
@@ -340,6 +352,16 @@ public class TestBulkSchemaAPI extends R
assertNotNull("field a3 not created", m);
assertEquals("myNewTxtField", m.get("type"));
+ m = getObj(harness, "mySimField", "fieldTypes");
+ assertNotNull(m);
+ m = (Map)m.get("similarity");
+ assertNotNull(m);
+ assertEquals("org.apache.lucene.misc.SweetSpotSimilarity", m.get("class"));
+
+ m = getObj(harness, "a4", "fields");
+ assertNotNull("field a4 not created", m);
+ assertEquals("mySimField", m.get("type"));
+
m = getObj(harness, "myWhitespaceTxtField", "fieldTypes");
assertNotNull(m);