SOLR-13802: Write analyzer property luceneMatchVersion to managed schema

This commit is contained in:
Thomas Wöckinger 2019-10-01 09:17:59 -04:00 committed by David Smiley
parent 67f4c7f36e
commit 4ddde00667
6 changed files with 16 additions and 6 deletions

View File

@ -259,6 +259,9 @@ Bug Fixes
* SOLR-13712: JMX MBeans are not exposed because of race condition between creating platform mbean server and * SOLR-13712: JMX MBeans are not exposed because of race condition between creating platform mbean server and
registering mbeans. (shalin) registering mbeans. (shalin)
* SOLR-13802: Managed schema manipulations were not persisting the optional luceneMatchVersion that can be set
on an Analyzer. (Thomas Wöckinger)
Other Changes Other Changes
---------------------- ----------------------

View File

@ -62,6 +62,7 @@ import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.QueryResponseWriter; import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.transform.TransformerFactory; import org.apache.solr.response.transform.TransformerFactory;
import org.apache.solr.rest.RestManager; import org.apache.solr.rest.RestManager;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.IndexSchemaFactory; import org.apache.solr.schema.IndexSchemaFactory;
import org.apache.solr.search.CacheConfig; import org.apache.solr.search.CacheConfig;
import org.apache.solr.search.FastLRUCache; import org.apache.solr.search.FastLRUCache;
@ -207,7 +208,7 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
getOverlay();//just in case it is not initialized getOverlay();//just in case it is not initialized
getRequestParams(); getRequestParams();
initLibs(); initLibs();
luceneMatchVersion = SolrConfig.parseLuceneVersionString(getVal("luceneMatchVersion", true)); luceneMatchVersion = SolrConfig.parseLuceneVersionString(getVal(IndexSchema.LUCENE_MATCH_VERSION_PARAM, true));
log.info("Using Lucene MatchVersion: {}", luceneMatchVersion); log.info("Using Lucene MatchVersion: {}", luceneMatchVersion);
String indexConfigPrefix; String indexConfigPrefix;
@ -896,7 +897,7 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
@Override @Override
public Map<String, Object> toMap(Map<String, Object> result) { public Map<String, Object> toMap(Map<String, Object> result) {
if (getZnodeVersion() > -1) result.put(ZNODEVER, getZnodeVersion()); if (getZnodeVersion() > -1) result.put(ZNODEVER, getZnodeVersion());
result.put("luceneMatchVersion", luceneMatchVersion); result.put(IndexSchema.LUCENE_MATCH_VERSION_PARAM, luceneMatchVersion);
result.put("updateHandler", getUpdateHandlerInfo()); result.put("updateHandler", getUpdateHandlerInfo());
Map m = new LinkedHashMap(); Map m = new LinkedHashMap();
result.put("query", m); result.put("query", m);

View File

@ -219,6 +219,8 @@ public class SchemaXmlWriter extends TextResponseWriter {
if ( ! "solr.TokenizerChain".equals(analyzerProperties.getVal(i))) { if ( ! "solr.TokenizerChain".equals(analyzerProperties.getVal(i))) {
writeAttr(name, analyzerProperties.getVal(i).toString()); writeAttr(name, analyzerProperties.getVal(i).toString());
} }
} else if (name.equals(IndexSchema.LUCENE_MATCH_VERSION_PARAM)) {
writeAttr(name, analyzerProperties.getVal(i).toString());
} }
} }
boolean isEmptyTag boolean isEmptyTag

View File

@ -234,10 +234,9 @@ public final class FieldTypePluginLoader
schema.getDefaultLuceneMatchVersion() : schema.getDefaultLuceneMatchVersion() :
SolrConfig.parseLuceneVersionString(matchVersionStr); SolrConfig.parseLuceneVersionString(matchVersionStr);
if (luceneMatchVersion == null) { if (luceneMatchVersion == null) {
throw new SolrException throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
( SolrException.ErrorCode.SERVER_ERROR,
"Configuration Error: Analyzer '" + clazz.getName() + "Configuration Error: Analyzer '" + clazz.getName() +
"' needs a 'luceneMatchVersion' parameter"); "' needs a '" + IndexSchema.LUCENE_MATCH_VERSION_PARAM + "' parameter");
} }
analyzer.setVersion(luceneMatchVersion); analyzer.setVersion(luceneMatchVersion);
return analyzer; return analyzer;

View File

@ -35,6 +35,7 @@ import org.apache.lucene.search.similarities.Similarity;
import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.core.CoreContainer; import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrCore; import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SimilarityFactory; import org.apache.solr.schema.SimilarityFactory;
import org.apache.solr.search.similarities.SchemaSimilarityFactory; import org.apache.solr.search.similarities.SchemaSimilarityFactory;
import org.apache.solr.util.RESTfulServerProvider; import org.apache.solr.util.RESTfulServerProvider;
@ -184,11 +185,13 @@ public class TestBulkSchemaAPI extends RestTestBase {
map = (Map) fromJSONString(response); map = (Map) fromJSONString(response);
assertNull(response, map.get("error")); assertNull(response, map.get("error"));
restTestHarness.checkAdminResponseStatus("/admin/cores?wt=xml&action=RELOAD&core=" + coreName, "0");
map = getObj(restTestHarness, "myNewTextFieldWithAnalyzerClass", "fieldTypes"); map = getObj(restTestHarness, "myNewTextFieldWithAnalyzerClass", "fieldTypes");
assertNotNull(map); assertNotNull(map);
Map analyzer = (Map)map.get("analyzer"); Map analyzer = (Map)map.get("analyzer");
assertEquals("org.apache.lucene.analysis.core.WhitespaceAnalyzer", String.valueOf(analyzer.get("class"))); assertEquals("org.apache.lucene.analysis.core.WhitespaceAnalyzer", String.valueOf(analyzer.get("class")));
assertEquals("5.0.0", String.valueOf(analyzer.get("luceneMatchVersion"))); assertEquals("5.0.0", String.valueOf(analyzer.get(IndexSchema.LUCENE_MATCH_VERSION_PARAM)));
} }
public void testAnalyzerByName() throws Exception { public void testAnalyzerByName() throws Exception {

View File

@ -622,6 +622,8 @@ public class SchemaTest extends RestTestBase {
SchemaResponse.UpdateResponse addFieldTypeResponse = addFieldTypeRequest.process(getSolrClient()); SchemaResponse.UpdateResponse addFieldTypeResponse = addFieldTypeRequest.process(getSolrClient());
assertValidSchemaResponse(addFieldTypeResponse); assertValidSchemaResponse(addFieldTypeResponse);
restTestHarness.reload();
SchemaRequest.FieldType fieldTypeRequest = new SchemaRequest.FieldType(fieldTypeName); SchemaRequest.FieldType fieldTypeRequest = new SchemaRequest.FieldType(fieldTypeName);
SchemaResponse.FieldTypeResponse newFieldTypeResponse = fieldTypeRequest.process(getSolrClient()); SchemaResponse.FieldTypeResponse newFieldTypeResponse = fieldTypeRequest.process(getSolrClient());
assertValidSchemaResponse(newFieldTypeResponse); assertValidSchemaResponse(newFieldTypeResponse);