mirror of https://github.com/apache/lucene.git
SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after calling addFields method
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1499578 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d23f0887e6
commit
e76d6599d9
|
@ -242,6 +242,9 @@ Bug Fixes
|
||||||
|
|
||||||
* SOLR-4452: Hunspell stemmer should not merge duplicate dictionary entries (janhoy)
|
* SOLR-4452: Hunspell stemmer should not merge duplicate dictionary entries (janhoy)
|
||||||
|
|
||||||
|
* SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after calling addFields
|
||||||
|
method. (Jun Ohtani, Steve Rowe)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -311,8 +311,8 @@ public class IndexSchema {
|
||||||
*/
|
*/
|
||||||
public SchemaField getUniqueKeyField() { return uniqueKeyField; }
|
public SchemaField getUniqueKeyField() { return uniqueKeyField; }
|
||||||
|
|
||||||
private String uniqueKeyFieldName;
|
protected String uniqueKeyFieldName;
|
||||||
private FieldType uniqueKeyFieldType;
|
protected FieldType uniqueKeyFieldType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The raw (field type encoded) value of the Unique Key field for
|
* The raw (field type encoded) value of the Unique Key field for
|
||||||
|
|
|
@ -334,6 +334,8 @@ public final class ManagedIndexSchema extends IndexSchema {
|
||||||
newSchema.similarityFactory = similarityFactory;
|
newSchema.similarityFactory = similarityFactory;
|
||||||
newSchema.isExplicitSimilarity = isExplicitSimilarity;
|
newSchema.isExplicitSimilarity = isExplicitSimilarity;
|
||||||
newSchema.uniqueKeyField = uniqueKeyField;
|
newSchema.uniqueKeyField = uniqueKeyField;
|
||||||
|
newSchema.uniqueKeyFieldName = uniqueKeyFieldName;
|
||||||
|
newSchema.uniqueKeyFieldType = uniqueKeyFieldType;
|
||||||
|
|
||||||
if (includeFieldDataStructures) {
|
if (includeFieldDataStructures) {
|
||||||
// These need new collections, since addFields() can add members to them
|
// These need new collections, since addFields() can add members to them
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<schema name="one_field_no_dynamic_field_unique_key" version="1.1">
|
||||||
|
<types>
|
||||||
|
<fieldType name="string" class="solr.StrField"/>
|
||||||
|
<fieldType name="text" class="solr.TextField">
|
||||||
|
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
|
||||||
|
</fieldType>
|
||||||
|
</types>
|
||||||
|
<fields>
|
||||||
|
<field name="str" type="string" indexed="true" stored="true"/>
|
||||||
|
</fields>
|
||||||
|
<uniqueKey>str</uniqueKey>
|
||||||
|
</schema>
|
|
@ -57,6 +57,7 @@ public class TestManagedSchema extends AbstractBadConfigTestBase {
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "solrconfig-basic.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "solrconfig-basic.xml"), tmpConfDir);
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "solrconfig.snippet.randomindexconfig.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "solrconfig.snippet.randomindexconfig.xml"), tmpConfDir);
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-one-field-no-dynamic-field.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-one-field-no-dynamic-field.xml"), tmpConfDir);
|
||||||
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-one-field-no-dynamic-field-unique-key.xml"), tmpConfDir);
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-minimal.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-minimal.xml"), tmpConfDir);
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema_codec.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema_codec.xml"), tmpConfDir);
|
||||||
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-bm25.xml"), tmpConfDir);
|
FileUtils.copyFileToDirectory(new File(testHomeConfDir, "schema-bm25.xml"), tmpConfDir);
|
||||||
|
@ -386,4 +387,39 @@ public class TestManagedSchema extends AbstractBadConfigTestBase {
|
||||||
assertQ(req(fieldName + ":thing"), "//*[@numFound='1']");
|
assertQ(req(fieldName + ":thing"), "//*[@numFound='1']");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPersistUniqueKey() throws Exception {
|
||||||
|
assertSchemaResource(collection, "managed-schema");
|
||||||
|
deleteCore();
|
||||||
|
File managedSchemaFile = new File(tmpConfDir, "managed-schema");
|
||||||
|
assertTrue(managedSchemaFile.delete()); // Delete managed-schema so it won't block parsing a new schema
|
||||||
|
initCore("solrconfig-mutable-managed-schema.xml", "schema-one-field-no-dynamic-field-unique-key.xml", tmpSolrHome.getPath());
|
||||||
|
|
||||||
|
assertTrue(managedSchemaFile.exists());
|
||||||
|
String managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
|
||||||
|
assertFalse(managedSchemaContents.contains("\"new_field\""));
|
||||||
|
|
||||||
|
Map<String,Object> options = new HashMap<String,Object>();
|
||||||
|
options.put("stored", "false");
|
||||||
|
IndexSchema oldSchema = h.getCore().getLatestSchema();
|
||||||
|
assertEquals("str", oldSchema.getUniqueKeyField().getName());
|
||||||
|
String fieldName = "new_field";
|
||||||
|
String fieldType = "string";
|
||||||
|
SchemaField newField = oldSchema.newField(fieldName, fieldType, options);
|
||||||
|
IndexSchema newSchema = oldSchema.addField(newField);
|
||||||
|
assertEquals("str", newSchema.getUniqueKeyField().getName());
|
||||||
|
h.getCore().setLatestSchema(newSchema);
|
||||||
|
log.info("####close harness");
|
||||||
|
h.close();
|
||||||
|
log.info("####close harness end");
|
||||||
|
initCore();
|
||||||
|
|
||||||
|
assertTrue(managedSchemaFile.exists());
|
||||||
|
FileInputStream stream = new FileInputStream(managedSchemaFile);
|
||||||
|
managedSchemaContents = IOUtils.toString(stream, "UTF-8");
|
||||||
|
stream.close(); // Explicitly close so that Windows can delete this file
|
||||||
|
assertTrue(managedSchemaContents.contains("<field name=\"new_field\" type=\"string\" stored=\"false\"/>"));
|
||||||
|
IndexSchema newNewSchema = h.getCore().getLatestSchema();
|
||||||
|
assertNotNull(newNewSchema.getUniqueKeyField());
|
||||||
|
assertEquals("str", newNewSchema.getUniqueKeyField().getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue