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 2013/04/22 16:26:58 UTC
svn commit: r1470539 [1/5] - in /lucene/dev/trunk/solr: ./
contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/
contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/
contrib/dataimporthandler/src/java/org/apac...
Author: sarowe
Date: Mon Apr 22 14:26:55 2013
New Revision: 1470539
URL: http://svn.apache.org/r1470539
Log:
SOLR-3251: Dynamically add fields to schema.
Added:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/POSTable.java (with props)
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/PUTable.java (with props)
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java (with props)
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema-id-and-version-fields-only.xml (with props)
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema-one-field-no-dynamic-field.xml (with props)
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mutable-managed-schema.xml (with props)
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-mutable-managed-schema.xml (with props)
lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java (with props)
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java (with props)
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestAddFieldRealTimeGet.java (with props)
Removed:
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Document.java
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java
lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImportHandler.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImporter.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/ConfigParseUtil.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/DIHConfiguration.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Entity.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContextImpl.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFieldReader.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestPlainTextEntityProcessor.java
lucene/dev/trunk/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java
lucene/dev/trunk/solr/contrib/uima/src/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java
lucene/dev/trunk/solr/contrib/uima/src/test/org/apache/solr/uima/analysis/UIMATokenizersSolrIntegrationTest.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/AbstractSolrEventListener.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/ResponseLogComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SolrQueryRequestBase.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/BaseSchemaResource.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldCollectionResource.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/FieldResource.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ClassicIndexSchemaFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ExternalFileField.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ExternalFileFieldReloader.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldProperties.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/FieldType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/IndexSchemaFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/SchemaField.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/TopGroupsShardRequestFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/TopGroupsResultTransformer.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/FileBasedSpellChecker.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/SolrSpellChecker.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexSplitter.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/IgnoreFieldUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/PreAnalyzedUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/processor/SignatureUpdateProcessorFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-managed-schema.xml
lucene/dev/trunk/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestJoin.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestTrie.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/analysis/TestLuceneMatchVersion.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/SolrCoreTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCodecSupport.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestQuerySenderListener.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestQuerySenderNoQuery.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/DocumentAnalysisRequestHandlerTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/FieldAnalysisRequestHandlerTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/highlight/TestPostingsSolrHighlighter.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/AbstractCurrencyFieldTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/CopyFieldTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/IndexSchemaRuntimeFieldTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/IndexSchemaTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/MultiTermTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/NotRequiredUniqueKeyTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PreAnalyzedFieldTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/RequiredFieldsTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/SchemaVersionSpecificBehaviorTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/SynonymTokenizerTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestManagedSchema.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryParsingTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestPseudoReturnFields.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/DocumentBuilderTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/TestIndexingPerformance.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java
lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Apr 22 14:26:55 2013
@@ -54,6 +54,11 @@ Upgrading from Solr 4.3.0
Detailed Change List
----------------------
+New Features
+----------------------
+
+* SOLR-3251: Dynamically add fields to schema. (Steve Rowe, Robert Muir, yonik)
+
Bug Fixes
----------------------
Modified: lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java (original)
+++ lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java Mon Apr 22 14:26:55 2013
@@ -17,7 +17,10 @@ package org.apache.solr.handler.clusteri
* limitations under the License.
*/
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -278,8 +281,8 @@ public class CarrotClusteringEngine exte
attributeBuilder.stemmerFactory(LuceneCarrot2StemmerFactory.class);
}
- // Pass the schema to SolrStopwordsCarrot2LexicalDataFactory.
- initAttributes.put("solrIndexSchema", core.getSchema());
+ // Pass the schema (via the core) to SolrStopwordsCarrot2LexicalDataFactory.
+ initAttributes.put("solrCore", core);
// Customize Carrot2's resource lookup to first look for resources
// using Solr's resource loader. If that fails, try loading from the classpath.
@@ -303,7 +306,7 @@ public class CarrotClusteringEngine exte
ct.setContextClassLoader(prev);
}
- SchemaField uniqueField = core.getSchema().getUniqueKeyField();
+ SchemaField uniqueField = core.getLatestSchema().getUniqueKeyField();
if (uniqueField == null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
CarrotClusteringEngine.class.getSimpleName() + " requires the schema to have a uniqueKeyField");
Modified: lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java (original)
+++ lucene/dev/trunk/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java Mon Apr 22 14:26:55 2013
@@ -26,8 +26,7 @@ import org.apache.lucene.analysis.util.T
import org.apache.lucene.analysis.commongrams.CommonGramsFilterFactory;
import org.apache.lucene.analysis.core.StopFilterFactory;
import org.apache.solr.analysis.TokenizerChain;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.ManagedIndexSchema;
+import org.apache.solr.core.SolrCore;
import org.carrot2.core.LanguageCode;
import org.carrot2.core.attribute.Init;
import org.carrot2.core.attribute.Processing;
@@ -38,7 +37,6 @@ import org.carrot2.text.util.MutableChar
import org.carrot2.util.attribute.Attribute;
import org.carrot2.util.attribute.Bindable;
import org.carrot2.util.attribute.Input;
-import org.carrot2.util.attribute.constraint.ImplementingClasses;
import org.slf4j.Logger;
import com.google.common.collect.HashMultimap;
@@ -61,9 +59,8 @@ public class SolrStopwordsCarrot2Lexical
@Init
@Input
- @Attribute(key = "solrIndexSchema")
- @ImplementingClasses(classes = { IndexSchema.class, ManagedIndexSchema.class })
- private IndexSchema schema;
+ @Attribute(key = "solrCore")
+ private SolrCore core;
@Processing
@Input
@@ -89,7 +86,7 @@ public class SolrStopwordsCarrot2Lexical
// No need to synchronize here, Carrot2 ensures that instances
// of this class are not used by multiple threads at a time.
if (!solrStopWords.containsKey(fieldName)) {
- final Analyzer fieldAnalyzer = schema.getFieldType(fieldName)
+ final Analyzer fieldAnalyzer = core.getLatestSchema().getFieldType(fieldName)
.getAnalyzer();
if (fieldAnalyzer instanceof TokenizerChain) {
final TokenFilterFactory[] filterFactories = ((TokenizerChain) fieldAnalyzer)
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/test/org/apache/solr/handler/dataimport/TestMailEntityProcessor.java Mon Apr 22 14:26:55 2013
@@ -65,7 +65,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top1 did not return 2 messages", swi.docs.size(), 2);
@@ -80,7 +80,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top2 and its children did not return 8 messages", swi.docs.size(), 8);
@@ -96,7 +96,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top2 and its direct children did not return 5 messages", swi.docs.size(), 5);
@@ -112,7 +112,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top2 and its direct children did not return 3 messages", swi.docs.size(), 3);
@@ -129,7 +129,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top2 and its direct children did not return 3 messages", swi.docs.size(), 3);
@@ -145,7 +145,7 @@ public class TestMailEntityProcessor ext
DataImporter di = new DataImporter();
di.loadAndInit(getConfigFromMap(paramMap));
Entity ent = di.getConfig().getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals("top2 and its direct children did not return 3 messages", swi.docs.size(), 3);
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImportHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImportHandler.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImportHandler.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImportHandler.java Mon Apr 22 14:26:55 2013
@@ -124,7 +124,7 @@ public class DataImportHandler extends R
}
SolrParams params = req.getParams();
NamedList defaultParams = (NamedList) initArgs.get("defaults");
- RequestInfo requestParams = new RequestInfo(getParamsMap(params), contentStream);
+ RequestInfo requestParams = new RequestInfo(req, getParamsMap(params), contentStream);
String command = requestParams.getCommand();
if (DataImporter.SHOW_CONF_CMD.equals(command)) {
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImporter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImporter.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImporter.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DataImporter.java Mon Apr 22 14:26:55 2013
@@ -20,9 +20,7 @@ package org.apache.solr.handler.dataimpo
import org.apache.solr.common.SolrException;
import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.SchemaField;
import org.apache.solr.util.SystemIdResolver;
-import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.XMLErrorLogger;
import org.apache.solr.handler.dataimport.config.ConfigNameConstants;
@@ -36,7 +34,6 @@ import static org.apache.solr.handler.da
import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
import static org.apache.solr.handler.dataimport.DocBuilder.loadClass;
import static org.apache.solr.handler.dataimport.config.ConfigNameConstants.CLASS;
-import static org.apache.solr.handler.dataimport.config.ConfigNameConstants.NAME;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,8 +48,14 @@ import javax.xml.parsers.DocumentBuilder
import java.io.IOException;
import java.io.StringReader;
-import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
@@ -86,7 +89,6 @@ public class DataImporter {
private ReentrantLock importLock = new ReentrantLock();
private boolean isDeltaImportSupported = false;
private final String handlerName;
- private Map<String, SchemaField> lowerNameVsSchemaField = new HashMap<String, SchemaField>();
/**
* Only for testing purposes
@@ -98,8 +100,7 @@ public class DataImporter {
DataImporter(SolrCore core, String handlerName) {
this.handlerName = handlerName;
this.core = core;
- this.schema = core.getSchema();
- loadSchemaFieldMap();
+ this.schema = core.getLatestSchema();
}
@@ -110,8 +111,13 @@ public class DataImporter {
if (importLock.tryLock()) {
boolean success = false;
try {
+ if (null != params.getRequest()) {
+ if (schema != params.getRequest().getSchema()) {
+ schema = params.getRequest().getSchema();
+ }
+ }
String dataConfigText = params.getDataConfig();
- String dataconfigFile = (String) params.getConfigFile();
+ String dataconfigFile = params.getConfigFile();
InputSource is = null;
if(dataConfigText!=null && dataConfigText.length()>0) {
is = new InputSource(new StringReader(dataConfigText));
@@ -161,31 +167,14 @@ public class DataImporter {
- private void loadSchemaFieldMap() {
- Map<String, SchemaField> modLnvsf = new HashMap<String, SchemaField>();
- for (Map.Entry<String, SchemaField> entry : schema.getFields().entrySet()) {
- modLnvsf.put(entry.getKey().toLowerCase(Locale.ROOT), entry.getValue());
- }
- lowerNameVsSchemaField = Collections.unmodifiableMap(modLnvsf);
- }
-
- public SchemaField getSchemaField(String caseInsensitiveName) {
- SchemaField schemaField = null;
- if(schema!=null) {
- schemaField = schema.getFieldOrNull(caseInsensitiveName);
- }
- if (schemaField == null) {
- schemaField = lowerNameVsSchemaField.get(caseInsensitiveName.toLowerCase(Locale.ROOT));
- }
- return schemaField;
+ public String getHandlerName() {
+ return handlerName;
}
- public String getHandlerName() {
- return handlerName;
- }
-
-
-
+ public IndexSchema getSchema() {
+ return schema;
+ }
+
/**
* Used by tests
*/
@@ -581,11 +570,7 @@ public class DataImporter {
public static final String TOTAL_DOCS_SKIPPED = "Total Documents Skipped";
}
- public IndexSchema getSchema() {
- return schema;
- }
-
- SolrCore getCore() {
+ public SolrCore getCore() {
return core;
}
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java Mon Apr 22 14:26:55 2013
@@ -26,7 +26,9 @@ import org.apache.solr.handler.dataimpor
import org.apache.solr.handler.dataimport.config.EntityField;
import static org.apache.solr.handler.dataimport.SolrWriter.LAST_INDEX_KEY;
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.*;
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow;
+import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -625,11 +627,12 @@ public class DocBuilder {
if (value == null) continue;
if (key.startsWith("$")) continue;
Set<EntityField> field = entity.getColNameVsField().get(key);
- if (field == null && dataImporter.getSchema() != null) {
+ IndexSchema schema = null == reqParams.getRequest() ? null : reqParams.getRequest().getSchema();
+ if (field == null && schema != null) {
// This can be a dynamic field or a field which does not have an entry in data-config ( an implicit field)
- SchemaField sf = dataImporter.getSchema().getFieldOrNull(key);
+ SchemaField sf = schema.getFieldOrNull(key);
if (sf == null) {
- sf = dataImporter.getSchemaField(key);
+ sf = config.getSchemaField(key);
}
if (sf != null) {
addFieldToDoc(entry.getValue(), sf.getName(), 1.0f, sf.multiValued(), doc);
@@ -643,7 +646,7 @@ public class DocBuilder {
boolean toWrite = f.isToWrite();
if(f.isDynamicName()){
name = vr.replaceTokens(name);
- SchemaField schemaField = dataImporter.getSchemaField(name);
+ SchemaField schemaField = config.getSchemaField(name);
if(schemaField == null) {
toWrite = false;
} else {
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java Mon Apr 22 14:26:55 2013
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.request.SolrQueryRequest;
public class RequestInfo {
private final String command;
@@ -37,13 +38,15 @@ public class RequestInfo {
private final List<String> entitiesToRun;
private final Map<String,Object> rawParams;
private final String configFile;
- private final String dataConfig;
+ private final String dataConfig;
+ private final SolrQueryRequest request;
//TODO: find a different home for these two...
private final ContentStream contentStream;
private final DebugInfo debugInfo;
- public RequestInfo(Map<String,Object> requestParams, ContentStream stream) {
+ public RequestInfo(SolrQueryRequest request, Map<String,Object> requestParams, ContentStream stream) {
+ this.request = request;
this.contentStream = stream;
if (requestParams.containsKey("command")) {
command = (String) requestParams.get("command");
@@ -167,4 +170,8 @@ public class RequestInfo {
public String getConfigFile() {
return configFile;
}
+
+ public SolrQueryRequest getRequest() {
+ return request;
+ }
}
\ No newline at end of file
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/ConfigParseUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/ConfigParseUtil.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/ConfigParseUtil.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/ConfigParseUtil.java Mon Apr 22 14:26:55 2013
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Map;
import org.apache.solr.handler.dataimport.DataImporter;
+import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,7 +33,6 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ConfigParseUtil {
- private static final Logger LOG = LoggerFactory .getLogger(ConfigParseUtil.class);
public static String getStringAttribute(Element e, String name, String def) {
String r = e.getAttribute(name);
@@ -77,46 +77,4 @@ public class ConfigParseUtil {
}
return result;
}
-
- public static void verifyWithSchema(DataImporter di, Map<String,EntityField> fields) {
- Map<String,SchemaField> schemaFields = null;
- if (di.getSchema() == null) {
- schemaFields = Collections.emptyMap();
- } else {
- schemaFields = di.getSchema().getFields();
- }
- for (Map.Entry<String,SchemaField> entry : schemaFields.entrySet()) {
- SchemaField sf = entry.getValue();
- if (!fields.containsKey(sf.getName())) {
- if (sf.isRequired()) {
- LOG
- .info(sf.getName()
- + " is a required field in SolrSchema . But not found in DataConfig");
- }
- }
- }
- for (Map.Entry<String,EntityField> entry : fields.entrySet()) {
- EntityField fld = entry.getValue();
- SchemaField field = di.getSchemaField(fld.getName());
- if (field == null) {
- LOG
- .info("The field :"
- + fld.getName()
- + " present in DataConfig does not have a counterpart in Solr Schema");
- }
- }
- }
-
- public static Map<String,EntityField> gatherAllFields(DataImporter di, Entity e) {
- Map<String,EntityField> fields = new HashMap<String,EntityField>();
- if (e.getFields() != null) {
- for (EntityField f : e.getFields()) {
- fields.put(f.getName(), f);
- }
- }
- for (Entity e1 : e.getChildren()) {
- fields.putAll(gatherAllFields(di, e1));
- }
- return fields;
- }
}
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/DIHConfiguration.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/DIHConfiguration.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/DIHConfiguration.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/DIHConfiguration.java Mon Apr 22 14:26:55 2013
@@ -2,10 +2,16 @@ package org.apache.solr.handler.dataimpo
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import org.apache.solr.handler.dataimport.DataImporter;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.SchemaField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
/*
@@ -41,6 +47,8 @@ import org.w3c.dom.Element;
* @since solr 1.3
*/
public class DIHConfiguration {
+ private static final Logger LOG = LoggerFactory.getLogger(DIHConfiguration.class);
+
// TODO - remove from here and add it to entity
private final String deleteQuery;
@@ -51,10 +59,14 @@ public class DIHConfiguration {
private final Script script;
private final Map<String, Map<String,String>> dataSources;
private final PropertyWriter propertyWriter;
+ private final IndexSchema schema;
+ private final Map<String,SchemaField> lowerNameVsSchemaField;
public DIHConfiguration(Element element, DataImporter di,
List<Map<String,String>> functions, Script script,
Map<String,Map<String,String>> dataSources, PropertyWriter pw) {
+ schema = di.getSchema();
+ lowerNameVsSchemaField = null == schema ? Collections.<String,SchemaField>emptyMap() : loadSchemaFieldMap();
this.deleteQuery = ConfigParseUtil.getStringAttribute(element, "deleteQuery", null);
this.onImportStart = ConfigParseUtil.getStringAttribute(element, "onImportStart", null);
this.onImportEnd = ConfigParseUtil.getStringAttribute(element, "onImportEnd", null);
@@ -62,9 +74,9 @@ public class DIHConfiguration {
List<Element> l = ConfigParseUtil.getChildNodes(element, "entity");
boolean docRootFound = false;
for (Element e : l) {
- Entity entity = new Entity(docRootFound, e, di, null);
- Map<String, EntityField> fields = ConfigParseUtil.gatherAllFields(di, entity);
- ConfigParseUtil.verifyWithSchema(di, fields);
+ Entity entity = new Entity(docRootFound, e, di, this, null);
+ Map<String, EntityField> fields = gatherAllFields(di, entity);
+ verifyWithSchema(fields);
modEntities.add(entity);
}
this.entities = Collections.unmodifiableList(modEntities);
@@ -80,6 +92,64 @@ public class DIHConfiguration {
this.dataSources = Collections.unmodifiableMap(dataSources);
this.propertyWriter = pw;
}
+
+ private void verifyWithSchema(Map<String,EntityField> fields) {
+ Map<String,SchemaField> schemaFields = null;
+ if (schema == null) {
+ schemaFields = Collections.emptyMap();
+ } else {
+ schemaFields = schema.getFields();
+ }
+ for (Map.Entry<String,SchemaField> entry : schemaFields.entrySet()) {
+ SchemaField sf = entry.getValue();
+ if (!fields.containsKey(sf.getName())) {
+ if (sf.isRequired()) {
+ LOG.info(sf.getName() + " is a required field in SolrSchema . But not found in DataConfig");
+ }
+ }
+ }
+ for (Map.Entry<String,EntityField> entry : fields.entrySet()) {
+ EntityField fld = entry.getValue();
+ SchemaField field = getSchemaField(fld.getName());
+ if (field == null) {
+ LOG.info("The field :" + fld.getName() + " present in DataConfig does not have a counterpart in Solr Schema");
+ }
+ }
+ }
+
+ private Map<String,EntityField> gatherAllFields(DataImporter di, Entity e) {
+ Map<String,EntityField> fields = new HashMap<String,EntityField>();
+ if (e.getFields() != null) {
+ for (EntityField f : e.getFields()) {
+ fields.put(f.getName(), f);
+ }
+ }
+ for (Entity e1 : e.getChildren()) {
+ fields.putAll(gatherAllFields(di, e1));
+ }
+ return fields;
+ }
+
+ private Map<String,SchemaField> loadSchemaFieldMap() {
+ Map<String, SchemaField> modLnvsf = new HashMap<String, SchemaField>();
+ for (Map.Entry<String, SchemaField> entry : schema.getFields().entrySet()) {
+ modLnvsf.put(entry.getKey().toLowerCase(Locale.ROOT), entry.getValue());
+ }
+ return Collections.unmodifiableMap(modLnvsf);
+ }
+
+ public SchemaField getSchemaField(String caseInsensitiveName) {
+ SchemaField schemaField = null;
+ if(schema!=null) {
+ schemaField = schema.getFieldOrNull(caseInsensitiveName);
+ }
+ if (schemaField == null) {
+ schemaField = lowerNameVsSchemaField.get(caseInsensitiveName.toLowerCase(Locale.ROOT));
+ }
+ return schemaField;
+ }
+
+
public String getDeleteQuery() {
return deleteQuery;
}
@@ -104,4 +174,8 @@ public class DIHConfiguration {
public PropertyWriter getPropertyWriter() {
return propertyWriter;
}
+
+ public IndexSchema getSchema() {
+ return schema;
+ }
}
\ No newline at end of file
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Entity.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Entity.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Entity.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/config/Entity.java Mon Apr 22 14:26:55 2013
@@ -29,6 +29,7 @@ import java.util.Set;
import org.apache.solr.handler.dataimport.DataImportHandlerException;
import org.apache.solr.handler.dataimport.DataImporter;
+import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.w3c.dom.Element;
@@ -45,9 +46,11 @@ public class Entity {
private final Map<String,Set<EntityField>> colNameVsField;
private final Map<String,String> allAttributes;
private final List<Map<String,String>> allFieldAttributes;
+ private final DIHConfiguration config;
- public Entity(boolean docRootFound, Element element, DataImporter di, Entity parent) {
+ public Entity(boolean docRootFound, Element element, DataImporter di, DIHConfiguration config, Entity parent) {
this.parentEntity = parent;
+ this.config = config;
String modName = ConfigParseUtil.getStringAttribute(element, ConfigNameConstants.NAME, null);
if (modName == null) {
@@ -85,13 +88,13 @@ public class Entity {
List<Map<String,String>> modAllFieldAttributes = new ArrayList<Map<String,String>>();
for (Element elem : n) {
EntityField.Builder fieldBuilder = new EntityField.Builder(elem);
- if (di.getSchema() != null) {
+ if (config.getSchema() != null) {
if (fieldBuilder.getNameOrColumn() != null
&& fieldBuilder.getNameOrColumn().contains("${")) {
fieldBuilder.dynamicName = true;
} else {
- SchemaField schemaField = di.getSchemaField(fieldBuilder
- .getNameOrColumn());
+ SchemaField schemaField = config.getSchemaField
+ (fieldBuilder.getNameOrColumn());
if (schemaField != null) {
fieldBuilder.name = schemaField.getName();
fieldBuilder.multiValued = schemaField.multiValued();
@@ -139,8 +142,8 @@ public class Entity {
.unmodifiableList(modAllFieldAttributes);
String modPkMappingFromSchema = null;
- if (di.getSchema() != null) {
- SchemaField uniqueKey = di.getSchema().getUniqueKeyField();
+ if (config.getSchema() != null) {
+ SchemaField uniqueKey = config.getSchema().getUniqueKeyField();
if (uniqueKey != null) {
modPkMappingFromSchema = uniqueKey.getName();
// if no fields are mentioned . solr uniqueKey is same as dih 'pk'
@@ -160,8 +163,7 @@ public class Entity {
n = ConfigParseUtil.getChildNodes(element, "entity");
List<Entity> modEntities = new ArrayList<Entity>();
for (Element elem : n) {
- modEntities
- .add(new Entity((docRootFound || this.docRoot), elem, di, this));
+ modEntities.add(new Entity((docRootFound || this.docRoot), elem, di, config, this));
}
this.children = Collections.unmodifiableList(modEntities);
}
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContextImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContextImpl.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContextImpl.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContextImpl.java Mon Apr 22 14:26:55 2013
@@ -37,7 +37,7 @@ public class TestContextImpl extends Abs
public void testCoreScope() {
DataImporter di = new DataImporter();
di.loadAndInit("<dataConfig><document /></dataConfig>");
- DocBuilder db = new DocBuilder(di, new SolrWriter(null, null),new SimplePropertiesWriter(), new RequestInfo(new HashMap<String,Object>(), null));
+ DocBuilder db = new DocBuilder(di, new SolrWriter(null, null),new SimplePropertiesWriter(), new RequestInfo(null, new HashMap<String,Object>(), null));
ContextImpl ctx = new ContextImpl(null, new VariableResolver(), null, "something", new HashMap<String,Object>(), null, db);
String lala = new String("lala");
ctx.setSessionAttribute("huhu", lala, Context.SCOPE_SOLR_CORE);
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestDocBuilder.java Mon Apr 22 14:26:55 2013
@@ -57,7 +57,7 @@ public class TestDocBuilder extends Abst
DIHConfiguration cfg = di.getConfig();
Entity ent = cfg.getEntities().get(0);
MockDataSource.setIterator("select * from x", new ArrayList<Map<String, Object>>().iterator());
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals(Boolean.TRUE, swi.deleteAllCalled);
@@ -77,7 +77,7 @@ public class TestDocBuilder extends Abst
Entity ent = cfg.getEntities().get(0);
MockDataSource.setIterator("select * from x", new ArrayList<Map<String, Object>>().iterator());
MockDataSource.setIterator("select id from x", new ArrayList<Map<String, Object>>().iterator());
- RequestInfo rp = new RequestInfo(createMap("command", "delta-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "delta-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals(Boolean.FALSE, swi.deleteAllCalled);
@@ -98,7 +98,7 @@ public class TestDocBuilder extends Abst
List<Map<String, Object>> l = new ArrayList<Map<String, Object>>();
l.add(createMap("id", 1, "desc", "one"));
MockDataSource.setIterator("select * from x", l.iterator());
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals(Boolean.TRUE, swi.deleteAllCalled);
@@ -127,7 +127,7 @@ public class TestDocBuilder extends Abst
List<Map<String, Object>> l = new ArrayList<Map<String, Object>>();
l.add(createMap("id", 1, "desc", "one"));
MockDataSource.setIterator("select * from x", l.iterator());
- RequestInfo rp = new RequestInfo(createMap("command", "import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "import"), null);
SolrWriterImpl swi = new SolrWriterImpl();
di.runCmd(rp, swi);
assertEquals(Boolean.FALSE, swi.deleteAllCalled);
@@ -153,7 +153,7 @@ public class TestDocBuilder extends Abst
di.loadAndInit(dc_singleEntity);
DIHConfiguration cfg = di.getConfig();
Entity ent = cfg.getEntities().get(0);
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
List<Map<String, Object>> l = new ArrayList<Map<String, Object>>();
l.add(createMap("id", 1, "desc", "one"));
l.add(createMap("id", 2, "desc", "two"));
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFieldReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFieldReader.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFieldReader.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFieldReader.java Mon Apr 22 14:26:55 2013
@@ -36,7 +36,7 @@ public class TestFieldReader extends Abs
DataImporter di = new DataImporter();
di.loadAndInit(config);
TestDocBuilder.SolrWriterImpl sw = new TestDocBuilder.SolrWriterImpl();
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
List<Map<String, Object>> l = new ArrayList<Map<String, Object>>();
l.add(createMap("xml", xml));
MockDataSource.setIterator("select * from a", l.iterator());
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestPlainTextEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestPlainTextEntityProcessor.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestPlainTextEntityProcessor.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestPlainTextEntityProcessor.java Mon Apr 22 14:26:55 2013
@@ -34,7 +34,7 @@ public class TestPlainTextEntityProcesso
DataImporter di = new DataImporter();
di.loadAndInit(DATA_CONFIG);
TestDocBuilder.SolrWriterImpl sw = new TestDocBuilder.SolrWriterImpl();
- RequestInfo rp = new RequestInfo(createMap("command", "full-import"), null);
+ RequestInfo rp = new RequestInfo(null, createMap("command", "full-import"), null);
di.runCmd(rp, sw);
assertEquals(DS.s, sw.docs.get(0).getFieldValue("x"));
}
Modified: lucene/dev/trunk/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java (original)
+++ lucene/dev/trunk/solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingDocumentLoader.java Mon Apr 22 14:26:55 2013
@@ -28,10 +28,10 @@ import org.apache.solr.common.params.Upd
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.loader.ContentStreamLoader;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
-import org.apache.solr.schema.IndexSchema;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.tika.config.TikaConfig;
@@ -81,7 +81,7 @@ public class ExtractingDocumentLoader ex
private static final XPathParser PARSER =
new XPathParser("xhtml", XHTMLContentHandler.XHTML);
- final IndexSchema schema;
+ final SolrCore core;
final SolrParams params;
final UpdateRequestProcessor processor;
final boolean ignoreTikaException;
@@ -95,7 +95,7 @@ public class ExtractingDocumentLoader ex
public ExtractingDocumentLoader(SolrQueryRequest req, UpdateRequestProcessor processor,
TikaConfig config, SolrContentHandlerFactory factory) {
this.params = req.getParams();
- schema = req.getSchema();
+ this.core = req.getCore();
this.config = config;
this.processor = processor;
@@ -167,7 +167,7 @@ public class ExtractingDocumentLoader ex
String xpathExpr = params.get(ExtractingParams.XPATH_EXPRESSION);
boolean extractOnly = params.getBool(ExtractingParams.EXTRACT_ONLY, false);
- SolrContentHandler handler = factory.createSolrContentHandler(metadata, params, schema);
+ SolrContentHandler handler = factory.createSolrContentHandler(metadata, params, req.getSchema());
ContentHandler parsingHandler = handler;
StringWriter writer = null;
Modified: lucene/dev/trunk/solr/contrib/uima/src/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/uima/src/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/uima/src/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java (original)
+++ lucene/dev/trunk/solr/contrib/uima/src/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java Mon Apr 22 14:26:55 2013
@@ -92,7 +92,7 @@ public class UIMAUpdateRequestProcessor
} catch (Exception e) {
String logField = solrUIMAConfiguration.getLogField();
if(logField == null){
- SchemaField uniqueKeyField = solrCore.getSchema().getUniqueKeyField();
+ SchemaField uniqueKeyField = cmd.getReq().getSchema().getUniqueKeyField();
if(uniqueKeyField != null){
logField = uniqueKeyField.getName();
}
Modified: lucene/dev/trunk/solr/contrib/uima/src/test/org/apache/solr/uima/analysis/UIMATokenizersSolrIntegrationTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/uima/src/test/org/apache/solr/uima/analysis/UIMATokenizersSolrIntegrationTest.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/uima/src/test/org/apache/solr/uima/analysis/UIMATokenizersSolrIntegrationTest.java (original)
+++ lucene/dev/trunk/solr/contrib/uima/src/test/org/apache/solr/uima/analysis/UIMATokenizersSolrIntegrationTest.java Mon Apr 22 14:26:55 2013
@@ -19,6 +19,7 @@ package org.apache.solr.uima.analysis;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.IndexSchema;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -34,10 +35,11 @@ public class UIMATokenizersSolrIntegrati
@Test
public void testInitialization() throws Exception {
- assertNotNull(h.getCore().getSchema().getField("sentences"));
- assertNotNull(h.getCore().getSchema().getFieldType("sentences"));
- assertNotNull(h.getCore().getSchema().getField("nouns"));
- assertNotNull(h.getCore().getSchema().getFieldType("nouns"));
+ IndexSchema schema = h.getCore().getLatestSchema();
+ assertNotNull(schema.getField("sentences"));
+ assertNotNull(schema.getFieldType("sentences"));
+ assertNotNull(schema.getField("nouns"));
+ assertNotNull(schema.getFieldType("nouns"));
}
@Test
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/AbstractSolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/AbstractSolrEventListener.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/AbstractSolrEventListener.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/AbstractSolrEventListener.java Mon Apr 22 14:26:55 2013
@@ -24,15 +24,18 @@ import org.apache.solr.search.SolrIndexS
/**
*/
public class AbstractSolrEventListener implements SolrEventListener {
- protected final SolrCore core;
+ private final SolrCore core;
+ public SolrCore getCore() { return core; }
+
public AbstractSolrEventListener(SolrCore core) {
this.core = core;
}
- protected NamedList args;
+ private NamedList args;
+ public NamedList getArgs() { return args; }
@Override
public void init(NamedList args) {
- this.args = args;
+ this.args = args.clone();
}
@Override
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java Mon Apr 22 14:26:55 2013
@@ -22,12 +22,10 @@ import org.apache.solr.cloud.ZkControlle
import org.apache.solr.common.SolrException;
import org.apache.solr.handler.component.HttpShardHandlerFactory;
import org.apache.solr.handler.component.ShardHandlerFactory;
-import org.apache.solr.schema.IndexSchema;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.util.PropertiesUtil;
import org.apache.solr.util.SystemIdResolver;
import org.apache.solr.util.plugin.PluginInfoInitialized;
-import org.apache.zookeeper.KeeperException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -484,16 +482,6 @@ public class ConfigSolrXml extends Confi
coreDescriptorPlusMap.remove(desc.getName());
}
- public IndexSchema getSchemaFromZk(ZkController zkController, String zkConfigName, String schemaName,
- SolrConfig config)
- throws KeeperException, InterruptedException {
- byte[] configBytes = zkController.getConfigFileData(zkConfigName, schemaName);
- InputSource is = new InputSource(new ByteArrayInputStream(configBytes));
- is.setSystemId(SystemIdResolver.createSystemIdFromResourceName(schemaName));
- IndexSchema schema = new IndexSchema(config, schemaName, is);
- return schema;
- }
-
@Override
public SolrConfig getSolrConfigFromZk(ZkController zkController, String zkConfigName, String solrConfigFileName,
SolrResourceLoader resourceLoader) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java Mon Apr 22 14:26:55 2013
@@ -31,6 +31,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
@@ -921,10 +922,10 @@ public class CoreContainer
IndexSchema schema = null;
if (indexSchemaCache != null) {
- File schemaFile = new File(dcore.getSchemaName());
+ final String resourceNameToBeUsed = IndexSchemaFactory.getResourceNameToBeUsed(dcore.getSchemaName(), config);
+ File schemaFile = new File(resourceNameToBeUsed);
if (!schemaFile.isAbsolute()) {
- schemaFile = new File(solrLoader.getInstanceDir() + "conf"
- + File.separator + dcore.getSchemaName());
+ schemaFile = new File(solrLoader.getConfigDir(), schemaFile.getPath());
}
if (schemaFile.exists()) {
String key = schemaFile.getAbsolutePath()
@@ -956,6 +957,54 @@ public class CoreContainer
}
/**
+ * Removes all references to the oldSchema from the schema cache; places an entry
+ * in the schema cache for the newSchema; and replaces references to the oldSchema
+ * with references to the newSchema in all registered cores.
+ *
+ * @param initiatingCore The initiating core; schema references doesn't need to be changed here
+ * @param oldSchema The schema to remove references to
+ * @param newSchema The schema to add references to
+ */
+ public void replaceSchema(SolrCore initiatingCore, IndexSchema oldSchema, IndexSchema newSchema) {
+ if (null != indexSchemaCache) { // isShareSchema() == true
+ // Remove references to the oldSchema from the schema cache
+ for (Iterator<Map.Entry<String,IndexSchema>> iter = indexSchemaCache.entrySet().iterator() ; iter.hasNext() ; ) {
+ Map.Entry<String,IndexSchema> entry = iter.next();
+ if (oldSchema == entry.getValue()) {
+ iter.remove();
+ }
+ }
+
+ // Cache the new schema
+ final String newSchemaResourceName
+ = IndexSchemaFactory.getResourceNameToBeUsed(newSchema.getResourceName(), initiatingCore.getSolrConfig());
+ File schemaFile = new File(newSchemaResourceName);
+ if ( ! schemaFile.isAbsolute()) {
+ schemaFile = new File(initiatingCore.getResourceLoader().getConfigDir(), schemaFile.getPath());
+ }
+ if (schemaFile.exists()) {
+ String key = schemaFile.getAbsolutePath()
+ + ":"
+ + new SimpleDateFormat("yyyyMMddHHmmss", Locale.ROOT).format(new Date(
+ schemaFile.lastModified()));
+ indexSchemaCache.put(key, newSchema);
+ }
+
+ // Replace oldSchema references with newSchema references in all active cores
+ for (String coreName : coreMaps.getAllCoreNames()) {
+ SolrCore activeCore = coreMaps.getCoreFromAnyList(coreName);
+ if (null != activeCore) {
+ if (initiatingCore != activeCore) {
+ if (oldSchema == activeCore.getLatestSchema()) {
+ activeCore.setLatestSchema(newSchema);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Creates a new core based on a descriptor but does not register it.
*
* @param dcore a core descriptor
@@ -1739,7 +1788,7 @@ class CoreMaps {
}
}
- protected SolrCore getCoreFromAnyList(String name) {
+ public SolrCore getCoreFromAnyList(String name) {
SolrCore core;
synchronized (locker) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/IndexReaderFactory.java Mon Apr 22 14:26:55 2013
@@ -19,7 +19,6 @@ package org.apache.solr.core;
import java.io.IOException;
import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.IndexReader;
import org.apache.lucene.store.Directory;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
@@ -61,7 +60,7 @@ public abstract class IndexReaderFactory
* @param indexDir indexDir index location
* @param core {@link SolrCore} instance where this reader will be used. NOTE:
* this SolrCore instance may not be fully configured yet, but basic things like
- * {@link SolrCore#getCoreDescriptor()}, {@link SolrCore#getSchema()} and
+ * {@link SolrCore#getCoreDescriptor()}, {@link SolrCore#getLatestSchema()} and
* {@link SolrCore#getSolrConfig()} are valid.
* @return An IndexReader instance
* @throws IOException If there is a low-level I/O error.
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java Mon Apr 22 14:26:55 2013
@@ -42,7 +42,7 @@ public class QuerySenderListener extends
public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
final SolrIndexSearcher searcher = newSearcher;
log.info("QuerySenderListener sending requests to " + newSearcher);
- List<NamedList> allLists = (List<NamedList>)args.get("queries");
+ List<NamedList> allLists = (List<NamedList>)getArgs().get("queries");
if (allLists == null) return;
for (NamedList nlst : allLists) {
SolrQueryRequest req = null;
@@ -54,14 +54,14 @@ public class QuerySenderListener extends
if (params.get("distrib") == null) {
params.add("distrib", false);
}
- req = new LocalSolrQueryRequest(core,params) {
+ req = new LocalSolrQueryRequest(getCore(),params) {
@Override public SolrIndexSearcher getSearcher() { return searcher; }
@Override public void close() { }
};
SolrQueryResponse rsp = new SolrQueryResponse();
SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp));
- core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
+ getCore().execute(getCore().getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
// Retrieve the Document instances (not just the ids) to warm
// the OS disk cache, and any Solr document cache. Only the top
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java Mon Apr 22 14:26:55 2013
@@ -4,9 +4,9 @@ import org.apache.lucene.codecs.Codec;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.codecs.lucene42.Lucene42Codec;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.SchemaAware;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.schema.SchemaField;
+import org.apache.solr.util.plugin.SolrCoreAware;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -31,8 +31,10 @@ import org.apache.solr.schema.SchemaFiel
* schema configuration.
* @lucene.experimental
*/
-public class SchemaCodecFactory extends CodecFactory implements SchemaAware {
+public class SchemaCodecFactory extends CodecFactory implements SolrCoreAware {
private Codec codec;
+ private volatile SolrCore core;
+
// TODO: we need to change how solr does this?
// rather than a string like "Pulsing" you need to be able to pass parameters
// and everything to a field in the schema, e.g. we should provide factories for
@@ -42,11 +44,17 @@ public class SchemaCodecFactory extends
// how it constructs this from the XML... i don't care.
@Override
- public void inform(final IndexSchema schema) {
+ public void inform(SolrCore core) {
+ this.core = core;
+ }
+
+ @Override
+ public void init(NamedList args) {
+ super.init(args);
codec = new Lucene42Codec() {
@Override
public PostingsFormat getPostingsFormatForField(String field) {
- final SchemaField fieldOrNull = schema.getFieldOrNull(field);
+ final SchemaField fieldOrNull = core.getLatestSchema().getFieldOrNull(field);
if (fieldOrNull == null) {
throw new IllegalArgumentException("no such field " + field);
}
@@ -58,7 +66,7 @@ public class SchemaCodecFactory extends
}
@Override
public DocValuesFormat getDocValuesFormatForField(String field) {
- final SchemaField fieldOrNull = schema.getFieldOrNull(field);
+ final SchemaField fieldOrNull = core.getLatestSchema().getFieldOrNull(field);
if (fieldOrNull == null) {
throw new IllegalArgumentException("no such field " + field);
}
@@ -73,7 +81,7 @@ public class SchemaCodecFactory extends
@Override
public Codec getCodec() {
- assert codec != null : "inform must be called first";
+ assert core != null : "inform must be called first";
return codec;
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java Mon Apr 22 14:26:55 2013
@@ -97,7 +97,7 @@ import org.apache.solr.response.transfor
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.IndexSchemaFactory;
-import org.apache.solr.schema.SchemaAware;
+import org.apache.solr.schema.SimilarityFactory;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.SolrFieldCacheMBean;
import org.apache.solr.search.SolrIndexSearcher;
@@ -147,7 +147,7 @@ public final class SolrCore implements S
private final SolrConfig solrConfig;
private final SolrResourceLoader resourceLoader;
- private final IndexSchema schema;
+ private volatile IndexSchema schema;
private final String dataDir;
private final UpdateHandler updateHandler;
private final SolrCoreState solrCoreState;
@@ -206,16 +206,19 @@ public final class SolrCore implements S
* @since solr 1.3
*/
public String getSchemaResource() {
- return schema.getResourceName();
+ return getLatestSchema().getResourceName();
}
- /**
- * Gets the schema object used by this core instance.
- */
- public IndexSchema getSchema() {
+ /** @return the latest snapshot of the schema used by this core instance. */
+ public IndexSchema getLatestSchema() {
return schema;
}
+ /** Sets the latest schema snapshot to be used by this core instance. */
+ public void setLatestSchema(IndexSchema replacementSchema) {
+ schema = replacementSchema;
+ }
+
public String getDataDir() {
return dataDir;
}
@@ -396,7 +399,7 @@ public final class SolrCore implements S
SolrConfig config = new SolrConfig(resourceLoader, getSolrConfig().getName(), null);
- IndexSchema schema = IndexSchemaFactory.buildIndexSchema(getSchema().getResourceName(), config);
+ IndexSchema schema = IndexSchemaFactory.buildIndexSchema(getLatestSchema().getResourceName(), config);
solrCoreState.increfSolrCoreState();
@@ -419,7 +422,8 @@ public final class SolrCore implements S
// gets a non-caching searcher
public SolrIndexSearcher newSearcher(String name) throws IOException {
- return new SolrIndexSearcher(this, getNewIndexDir(), schema, getSolrConfig().indexConfig, name, false, directoryFactory);
+ return new SolrIndexSearcher(this, getNewIndexDir(), getLatestSchema(), getSolrConfig().indexConfig,
+ name, false, directoryFactory);
}
@@ -496,7 +500,8 @@ public final class SolrCore implements S
log.warn(logid+"Solr index directory '" + new File(indexDir) + "' doesn't exist."
+ " Creating new index...");
- SolrIndexWriter writer = SolrIndexWriter.create("SolrCore.initIndex", indexDir, getDirectoryFactory(), true, schema, solrConfig.indexConfig, solrDelPolicy, codec);
+ SolrIndexWriter writer = SolrIndexWriter.create("SolrCore.initIndex", indexDir, getDirectoryFactory(), true,
+ getLatestSchema(), solrConfig.indexConfig, solrDelPolicy, codec);
writer.close();
}
@@ -679,10 +684,6 @@ public final class SolrCore implements S
dataDir = SolrResourceLoader.normalizeDir(dataDir);
log.info(logid+"Opening new SolrCore at " + resourceLoader.getInstanceDir() + ", dataDir="+dataDir);
- if (schema==null) {
- schema = IndexSchemaFactory.buildIndexSchema(IndexSchema.DEFAULT_SCHEMA_FILE, config);
- }
-
if (null != cd && null != cd.getCloudDescriptor()) {
// we are evidently running in cloud mode.
//
@@ -712,7 +713,16 @@ public final class SolrCore implements S
infoRegistry.put("fieldCache", new SolrFieldCacheMBean());
+ if (schema==null) {
+ schema = IndexSchemaFactory.buildIndexSchema(IndexSchema.DEFAULT_SCHEMA_FILE, config);
+ }
this.schema = schema;
+ final SimilarityFactory similarityFactory = schema.getSimilarityFactory();
+ if (similarityFactory instanceof SolrCoreAware) {
+ // Similarity needs SolrCore before inform() is called on all registered SolrCoreAware listeners below
+ ((SolrCoreAware)similarityFactory).inform(this);
+ }
+
this.dataDir = dataDir;
this.startTime = System.currentTimeMillis();
this.maxWarmingSearchers = config.maxWarmingSearchers;
@@ -854,8 +864,10 @@ public final class SolrCore implements S
}
};
}
- if (factory instanceof SchemaAware) {
- ((SchemaAware)factory).inform(schema);
+ if (factory instanceof SolrCoreAware) {
+ // CodecFactory needs SolrCore before inform() is called on all registered
+ // SolrCoreAware listeners, at the end of the SolrCore constructor
+ ((SolrCoreAware)factory).inform(this);
} else {
for (FieldType ft : schema.getFieldTypes().values()) {
if (null != ft.getPostingsFormat()) {
@@ -1393,7 +1405,8 @@ public final class SolrCore implements S
}
// for now, turn off caches if this is for a realtime reader (caches take a little while to instantiate)
- tmp = new SolrIndexSearcher(this, newIndexDir, schema, getSolrConfig().indexConfig, (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
+ tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(), getSolrConfig().indexConfig,
+ (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
} else {
// newestSearcher == null at this point
@@ -1403,11 +1416,13 @@ public final class SolrCore implements S
// so that we pick up any uncommitted changes and so we don't go backwards
// in time on a core reload
DirectoryReader newReader = newReaderCreator.call();
- tmp = new SolrIndexSearcher(this, newIndexDir, schema, getSolrConfig().indexConfig, (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
+ tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(), getSolrConfig().indexConfig,
+ (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
} else {
// normal open that happens at startup
// verbose("non-reopen START:");
- tmp = new SolrIndexSearcher(this, newIndexDir, schema, getSolrConfig().indexConfig, "main", true, directoryFactory);
+ tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(), getSolrConfig().indexConfig,
+ "main", true, directoryFactory);
// verbose("non-reopen DONE: searcher=",tmp);
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Mon Apr 22 14:26:55 2013
@@ -41,6 +41,8 @@ import org.apache.lucene.analysis.util.W
import org.apache.solr.common.ResourceLoader;
import org.apache.solr.handler.admin.CoreAdminHandler;
import org.apache.solr.handler.component.ShardHandlerFactory;
+import org.apache.solr.schema.ManagedIndexSchemaFactory;
+import org.apache.solr.schema.SimilarityFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -730,11 +732,14 @@ public class SolrResourceLoader implemen
awareCompatibility = new HashMap<Class, Class[]>();
awareCompatibility.put(
SolrCoreAware.class, new Class[] {
- SolrRequestHandler.class,
+ CodecFactory.class,
+ ManagedIndexSchemaFactory.class,
QueryResponseWriter.class,
SearchComponent.class,
- UpdateRequestProcessorFactory.class,
- ShardHandlerFactory.class
+ ShardHandlerFactory.class,
+ SimilarityFactory.class,
+ SolrRequestHandler.class,
+ UpdateRequestProcessorFactory.class
}
);
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/FieldAnalysisRequestHandler.java Mon Apr 22 14:26:55 2013
@@ -30,9 +30,10 @@ import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.commons.io.IOUtils;
-import java.util.*;
import java.io.Reader;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
/**
* Provides the ability to specify multiple field types and field names in the same request. Expected parameters:
@@ -96,7 +97,7 @@ public class FieldAnalysisRequestHandler
@Override
protected NamedList doAnalysis(SolrQueryRequest req) throws Exception {
FieldAnalysisRequest analysisRequest = resolveAnalysisRequest(req);
- IndexSchema indexSchema = req.getCore().getSchema();
+ IndexSchema indexSchema = req.getSchema();
return handleAnalysisRequest(analysisRequest, indexSchema);
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Mon Apr 22 14:26:55 2013
@@ -75,7 +75,7 @@ public class SystemInfoHandler extends R
@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception
{
- rsp.add( "core", getCoreInfo( req.getCore() ) );
+ rsp.add( "core", getCoreInfo( req.getCore(), req.getSchema() ) );
boolean solrCloudMode = req.getCore().getCoreDescriptor().getCoreContainer().isZooKeeperAware();
rsp.add( "mode", solrCloudMode ? "solrcloud" : "std");
rsp.add( "lucene", getLuceneInfo() );
@@ -87,10 +87,9 @@ public class SystemInfoHandler extends R
/**
* Get system info
*/
- private SimpleOrderedMap<Object> getCoreInfo( SolrCore core ) {
+ private SimpleOrderedMap<Object> getCoreInfo( SolrCore core, IndexSchema schema ) {
SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
- IndexSchema schema = core.getSchema();
info.add( "schema", schema != null ? schema.getSchemaName():"no schema!" );
// Host
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Mon Apr 22 14:26:55 2013
@@ -23,7 +23,12 @@ import org.apache.lucene.index.AtomicRea
import org.apache.lucene.index.IndexReaderContext;
import org.apache.lucene.index.ReaderUtil;
import org.apache.lucene.index.Term;
-import org.apache.lucene.search.*;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.FieldComparator;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
import org.apache.lucene.search.grouping.GroupDocs;
import org.apache.lucene.search.grouping.SearchGroup;
import org.apache.lucene.search.grouping.TopGroups;
@@ -43,7 +48,19 @@ import org.apache.solr.response.ResultCo
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
-import org.apache.solr.search.*;
+import org.apache.solr.search.DocIterator;
+import org.apache.solr.search.DocList;
+import org.apache.solr.search.DocListAndSet;
+import org.apache.solr.search.DocSlice;
+import org.apache.solr.search.Grouping;
+import org.apache.solr.search.QParser;
+import org.apache.solr.search.QParserPlugin;
+import org.apache.solr.search.QueryParsing;
+import org.apache.solr.search.ReturnFields;
+import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.search.SolrReturnFields;
+import org.apache.solr.search.SortSpec;
+import org.apache.solr.search.SyntaxError;
import org.apache.solr.search.grouping.CommandHandler;
import org.apache.solr.search.grouping.GroupingSpecification;
import org.apache.solr.search.grouping.distributed.ShardRequestFactory;
@@ -69,7 +86,15 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
/**
* TODO!
@@ -101,7 +126,7 @@ public class QueryComponent extends Sear
}
rb.setFieldFlags( flags );
- String defType = params.get(QueryParsing.DEFTYPE,QParserPlugin.DEFAULT_QTYPE);
+ String defType = params.get(QueryParsing.DEFTYPE, QParserPlugin.DEFAULT_QTYPE);
// get it from the response builder to give a different component a chance
// to set it.
@@ -225,7 +250,7 @@ public class QueryComponent extends Sear
// too if desired).
String ids = params.get(ShardParams.IDS);
if (ids != null) {
- SchemaField idField = req.getSchema().getUniqueKeyField();
+ SchemaField idField = searcher.getSchema().getUniqueKeyField();
List<String> idArr = StrUtils.splitSmart(ids, ",", true);
int[] luceneIds = new int[idArr.size()];
int docs = 0;
@@ -463,7 +488,7 @@ public class QueryComponent extends Sear
FieldComparator comparator = null;
String fieldname = sortField.getField();
- FieldType ft = fieldname==null ? null : req.getSchema().getFieldTypeNoEx(fieldname);
+ FieldType ft = fieldname==null ? null : searcher.getSchema().getFieldTypeNoEx(fieldname);
Object[] vals = new Object[nDocs];
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1470539&r1=1470538&r2=1470539&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Mon Apr 22 14:26:55 2013
@@ -20,8 +20,22 @@ package org.apache.solr.handler.componen
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
-import org.apache.lucene.index.*;
-import org.apache.lucene.search.*;
+import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DocsEnum;
+import org.apache.lucene.index.Fields;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.Terms;
+import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.FieldComparator;
+import org.apache.lucene.search.FieldComparatorSource;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.TermQuery;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.SentinelIntSet;
@@ -29,6 +43,7 @@ import org.apache.solr.cloud.ZkControlle
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.QueryElevationParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.schema.IndexSchema;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
@@ -60,7 +75,14 @@ import java.io.InputStream;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
/**
* A component to elevate some documents to the top of the result set.
@@ -139,9 +161,10 @@ public class QueryElevationComponent ext
@Override
public void inform(SolrCore core) {
+ IndexSchema schema = core.getLatestSchema();
String a = initArgs.get(FIELD_TYPE);
if (a != null) {
- FieldType ft = core.getSchema().getFieldTypes().get(a);
+ FieldType ft = schema.getFieldTypes().get(a);
if (ft == null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
"Unknown FieldType: '" + a + "' used in QueryElevationComponent");
@@ -149,7 +172,7 @@ public class QueryElevationComponent ext
analyzer = ft.getQueryAnalyzer();
}
- SchemaField sf = core.getSchema().getUniqueKeyField();
+ SchemaField sf = schema.getUniqueKeyField();
if( sf == null) {
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
"QueryElevationComponent requires the schema to have a uniqueKeyField." );