diff --git a/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java b/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java index 00e6aca3288..f540a6417f0 100644 --- a/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java +++ b/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java @@ -68,12 +68,17 @@ public class SolrUIMAConfigurationReader { NamedList fieldMappings = (NamedList) args.get("fieldMappings"); /* iterate over UIMA types */ for (int i = 0; i < fieldMappings.size(); i++) { - NamedList mapping = (NamedList) fieldMappings.get("mapping", i); - String typeName = (String) mapping.get("type"); - String featureName = (String) mapping.get("feature"); - String mappedFieldName = (String) mapping.get("field"); + NamedList type = (NamedList) fieldMappings.get("type", i); + String typeName = (String)type.get("name"); + Map subMap = new HashMap(); - subMap.put(featureName, mappedFieldName); + /* iterate over mapping definitions */ + for(int j = 0; j < type.size() - 1; j++){ + NamedList mapping = (NamedList) type.get("mapping", j + 1); + String featureName = (String) mapping.get("feature"); + String mappedFieldName = (String) mapping.get("field"); + subMap.put(featureName, mappedFieldName); + } map.put(typeName, subMap); } return map; diff --git a/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java b/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java index 8b3cb547d67..6994a5e3522 100644 --- a/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java +++ b/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java @@ -39,7 +39,7 @@ import org.apache.uima.resource.ResourceInitializationException; */ public class UIMAUpdateRequestProcessor extends UpdateRequestProcessor { - private SolrUIMAConfiguration solrUIMAConfiguration; + SolrUIMAConfiguration solrUIMAConfiguration; private AEProvider aeProvider; diff --git a/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java b/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java index 392afcf1ffc..0e2d5147215 100644 --- a/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java +++ b/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java @@ -33,6 +33,7 @@ import org.apache.solr.core.SolrCore; import org.apache.solr.handler.XmlUpdateRequestHandler; import org.apache.solr.request.SolrQueryRequestBase; import org.apache.solr.response.SolrQueryResponse; +import org.apache.solr.update.processor.UpdateRequestProcessor; import org.apache.solr.update.processor.UpdateRequestProcessorChain; import org.junit.Before; import org.junit.BeforeClass; @@ -66,6 +67,26 @@ public class UIMAUpdateRequestProcessorTest extends SolrTestCaseJ4 { UIMAUpdateRequestProcessorFactory factory = (UIMAUpdateRequestProcessorFactory) chained .getFactories()[0]; assertNotNull(factory); + UpdateRequestProcessor processor = factory.getInstance(req(), null, null); + assertTrue(processor instanceof UIMAUpdateRequestProcessor); + } + + @Test + public void testMultiMap() { + SolrCore core = h.getCore(); + UpdateRequestProcessorChain chained = core.getUpdateProcessingChain("uima-multi-map"); + assertNotNull(chained); + UIMAUpdateRequestProcessorFactory factory = (UIMAUpdateRequestProcessorFactory) chained + .getFactories()[0]; + assertNotNull(factory); + UpdateRequestProcessor processor = factory.getInstance(req(), null, null); + assertTrue(processor instanceof UIMAUpdateRequestProcessor); + SolrUIMAConfiguration conf = ((UIMAUpdateRequestProcessor)processor).solrUIMAConfiguration; + Map> map = conf.getTypesFeaturesFieldsMapping(); + Map subMap = map.get("a-type-which-can-have-multiple-features"); + assertEquals(2, subMap.size()); + assertEquals("1", subMap.get("A")); + assertEquals("2", subMap.get("B")); } @Test diff --git a/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml b/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml index 5ca6b8a335e..c0c8d17df4a 100644 --- a/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml +++ b/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml @@ -978,20 +978,26 @@ - - org.apache.uima.SentenceAnnotation - coveredText - sentence + + org.apache.uima.SentenceAnnotation + + coveredText + sentence + - - org.apache.solr.uima.ts.SentimentAnnotation - mood - sentiment + + org.apache.solr.uima.ts.SentimentAnnotation + + mood + sentiment + - - org.apache.solr.uima.ts.EntityAnnotation - coveredText - entity + + org.apache.solr.uima.ts.EntityAnnotation + + coveredText + entity + @@ -1000,6 +1006,36 @@ + + + + + 3 + + /TestAE.xml + + false + + text + + + + + a-type-which-can-have-multiple-features + + A + 1 + + + B + 2 + + + + + + +