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