Author: rwesten
Date: Mon Sep 23 11:23:33 2013
New Revision: 1525556
URL: http://svn.apache.org/r1525556
Log:
STANBOL-1162: update to Solr 4.4.0; This comes along with several adaptions to
API changes of Solr. See comments on the Issue for details
Modified:
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
Modified:
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
(original)
+++
stanbol/trunk/enhancement-engines/entitylinking/labeltokenizer-lucene/src/main/java/org/apache/stanbol/enhancer/engines/entitylinking/labeltokenizer/lucene/LuceneLabelTokenizer.java
Mon Sep 23 11:23:33 2013
@@ -20,6 +20,8 @@ import java.io.CharArrayReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -102,30 +104,9 @@ public class LuceneLabelTokenizer implem
if(value != null && !value.toString().isEmpty() &&
!DEFAULT_CLASS_NAME_CONFIG.equals(value)){
Entry<String,Map<String,String>> charFilterConfig =
parseConfigLine(
PROPERTY_CHAR_FILTER_FACTORY, value.toString());
- Object factoryObject;
- try {
- factoryObject =
resourceLoader.newInstance(charFilterConfig.getKey(), Object.class);
- } catch (SolrException e) {
- throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY,
"Unable to instantiate the "
- + "class '"+charFilterConfig.getKey()+"'!", e);
- }
-
- if(factoryObject instanceof CharFilterFactory){
- charFilterFactory = (CharFilterFactory)factoryObject;
- Map<String,String> config = charFilterConfig.getValue();
- addLuceneMatchVersionIfNotPresent(config, charFilterFactory);
- charFilterFactory.init(config);
- if(factoryObject instanceof ResourceLoaderAware){
- try {
-
((ResourceLoaderAware)factoryObject).inform(resourceLoader);
- } catch (IOException e) {
- throw new
ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY, "Could not load
configuration");
- }
- }
- } else {
- throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY,
"The parsed class '"
- + charFilterConfig.getKey() +"' is not assignable to
"+CharFilterFactory.class);
- }
+ charFilterFactory = initAnalyzer(PROPERTY_CHAR_FILTER_FACTORY,
+ charFilterConfig.getKey(), CharFilterFactory.class,
+ charFilterConfig.getValue());
} else {
charFilterFactory = null;
}
@@ -137,32 +118,9 @@ public class LuceneLabelTokenizer implem
}
Entry<String,Map<String,String>> tokenizerConfig = parseConfigLine(
PROPERTY_CHAR_FILTER_FACTORY, value.toString());
-
- Object factoryObject;
- try {
- factoryObject =
resourceLoader.newInstance(tokenizerConfig.getKey(), Object.class);
- } catch (SolrException e) {
- throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY,
"Unable to instantiate the "
- + "class '"+tokenizerConfig.getKey()+"'!", e);
- }
-
- if(factoryObject instanceof TokenizerFactory){
- tokenizerFactory = (TokenizerFactory)factoryObject;
- Map<String,String> config = tokenizerConfig.getValue();
- addLuceneMatchVersionIfNotPresent(config, tokenizerFactory);
- tokenizerFactory.init(config);
- } else {
- throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY, "The
instance "
- + factoryObject + "of the parsed parsed class '" +
tokenizerConfig.getKey()
- + "' is not assignable to "+TokenizerFactory.class);
- }
- if(factoryObject instanceof ResourceLoaderAware){
- try {
- ((ResourceLoaderAware)factoryObject).inform(resourceLoader);
- } catch (IOException e) {
- throw new ConfigurationException(PROPERTY_TOKENIZER_FACTORY,
"Could not load configuration");
- }
- }
+ tokenizerFactory = initAnalyzer(PROPERTY_TOKENIZER_FACTORY,
+ tokenizerConfig.getKey(), TokenizerFactory.class,
+ tokenizerConfig.getValue());
//initialise the list of Token Filters
Collection<String> values;
@@ -189,31 +147,10 @@ public class LuceneLabelTokenizer implem
}
Entry<String,Map<String,String>> filterConfig = parseConfigLine(
PROPERTY_CHAR_FILTER_FACTORY, filterConfigLine);
- Object filterFactoryObject;
- try {
- filterFactoryObject =
resourceLoader.newInstance(filterConfig.getKey(), Object.class);
- } catch (SolrException e) {
- throw new
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "Unable to instantiate
the "
- + "class '"+filterConfig.getKey()+"'!", e);
- }
-
- if(filterFactoryObject instanceof TokenFilterFactory){
- TokenFilterFactory tff =
(TokenFilterFactory)filterFactoryObject;
- Map<String,String> config = filterConfig.getValue();
- addLuceneMatchVersionIfNotPresent(config,tff);
- tff.init(config);
- filterFactories.add(tff);
- } else {
- throw new
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "The parsed class '"
- + filterConfig.getKey() +"' is not assignable to
"+TokenFilterFactory.class);
- }
- if(filterFactoryObject instanceof ResourceLoaderAware){
- try {
-
((ResourceLoaderAware)filterFactoryObject).inform(resourceLoader);
- } catch (IOException e) {
- throw new
ConfigurationException(PROPERTY_TOKEN_FILTER_FACTORY, "Could not load
configuration");
- }
- }
+ TokenFilterFactory tff =
initAnalyzer(PROPERTY_TOKEN_FILTER_FACTORY,
+ filterConfig.getKey(), TokenFilterFactory.class,
+ filterConfig.getValue());
+ filterFactories.add(tff);
}
//init the language configuration
value = ctx.getProperties().get(LabelTokenizer.SUPPORTED_LANUAGES);
@@ -224,12 +161,9 @@ public class LuceneLabelTokenizer implem
langConf.setConfiguration(ctx.getProperties());
}
- private void addLuceneMatchVersionIfNotPresent(Map<String, String>
config, AbstractAnalysisFactory factory) {
+ private static void addLuceneMatchVersionIfNotPresent(Map<String,
String> config) {
if(!config.containsKey("luceneMatchVersion")){
- config.put("luceneMatchVersion",
Version.LUCENE_41.toString());
- }
- if(factory.getLuceneMatchVersion() == null){
- factory.setLuceneMatchVersion(Version.LUCENE_41);
+ config.put("luceneMatchVersion",
Version.LUCENE_44.toString());
}
}
@@ -341,4 +275,50 @@ public class LuceneLabelTokenizer implem
}
return params.isEmpty() ? new HashMap<String,String>() : params;
}
+
+ private <T> T initAnalyzer(String property, String analyzerName, Class<T>
type, Map<String,String> config)
+ throws ConfigurationException {
+ Class<? extends T> analyzerClass;
+ try {
+ analyzerClass = resourceLoader.findClass(analyzerName, type);
+ } catch (SolrException e) {
+ throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY,
"Unable find "
+ + type.getSimpleName()+ " '" + analyzerName+"'!", e);
+ }
+ Constructor<? extends T> constructor;
+ try {
+ constructor = analyzerClass.getConstructor(Map.class);
+ } catch (NoSuchMethodException e1) {
+ throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY,
"Unable find "
+ + type.getSimpleName()+ "constructor with parameter
Map<String,String> "
+ + "for class " + analyzerClass +" (analyzer:
'"+analyzerName+"') !");
+ }
+ addLuceneMatchVersionIfNotPresent(config);
+ T analyzer;
+ try {
+ analyzer = constructor.newInstance(config);
+ } catch (IllegalArgumentException e) {
+ throw new ConfigurationException(property, "Unable to instantiate "
+ +type.getSimpleName()+' '+ analyzerClass +" (analyzer:
"+analyzerName+"') !",e);
+ } catch (InstantiationException e) {
+ throw new ConfigurationException(property, "Unable to instantiate "
+ +type.getSimpleName()+' '+ analyzerClass +" (analyzer:
"+analyzerName+"') !",e);
+ } catch (IllegalAccessException e) {
+ throw new ConfigurationException(property, "Unable to instantiate "
+ +type.getSimpleName()+' '+ analyzerClass +" (analyzer:
"+analyzerName+"') !",e);
+ } catch (InvocationTargetException e) {
+ throw new ConfigurationException(property, "Unable to instantiate "
+ +type.getSimpleName()+' '+ analyzerClass +" (analyzer:
"+analyzerName+"') !",e);
+ }
+ if(analyzer instanceof ResourceLoaderAware){
+ try {
+ ((ResourceLoaderAware)analyzer).inform(resourceLoader);
+ } catch (IOException e) {
+ throw new ConfigurationException(PROPERTY_CHAR_FILTER_FACTORY,
"Could not load configuration");
+ }
+ }
+ return analyzer;
+ }
+
+
}
Modified:
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
(original)
+++
stanbol/trunk/enhancement-engines/kuromoji-nlp/src/main/java/org/apache/stanbol/enhancer/engines/kuromoji/impl/KuromojiNlpEngine.java
Mon Sep 23 11:23:33 2013
@@ -115,7 +115,7 @@ import org.slf4j.LoggerFactory;
})
public class KuromojiNlpEngine extends
AbstractEnhancementEngine<IOException,RuntimeException> implements
ServiceProperties {
- private static final Version LUCENE_VERSION = Version.LUCENE_41;
+ private static final Version LUCENE_VERSION = Version.LUCENE_44;
private static final String TOKENIZER_MODE = "search"; //normal, extended
private static final Map<String,Object> SERVICE_PROPERTIES;
private static final Map<String,String> TOKENIZER_FACTORY_CONFIG = new
HashMap<String,String>();
@@ -361,25 +361,17 @@ public class KuromojiNlpEngine extends A
//and third the parentResourceLoader (if present).
resourceLoader = new
StanbolResourceLoader(KuromojiNlpEngine.class.getClassLoader(),
new StanbolResourceLoader(parentResourceLoader));
- tokenizerFactory = new JapaneseTokenizerFactory();
- tokenizerFactory.init(TOKENIZER_FACTORY_CONFIG);
- tokenizerFactory.setLuceneMatchVersion(LUCENE_VERSION);
+ tokenizerFactory = new
JapaneseTokenizerFactory(TOKENIZER_FACTORY_CONFIG);
((ResourceLoaderAware) tokenizerFactory).inform(resourceLoader);
//base form filter
- TokenFilterFactory baseFormFilterFactory = new
JapaneseBaseFormFilterFactory();
- baseFormFilterFactory.init(BASE_FORM_FILTER_CONFIG);
- baseFormFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+ TokenFilterFactory baseFormFilterFactory = new
JapaneseBaseFormFilterFactory(BASE_FORM_FILTER_CONFIG);
filterFactories.add(baseFormFilterFactory);
//POS filter
- TokenFilterFactory posFilterFactory = new
JapanesePartOfSpeechStopFilterFactory();
- posFilterFactory.init(POS_FILTER_CONFIG);
- posFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+ TokenFilterFactory posFilterFactory = new
JapanesePartOfSpeechStopFilterFactory(POS_FILTER_CONFIG);
((ResourceLoaderAware) posFilterFactory).inform(resourceLoader);
filterFactories.add(posFilterFactory);
//Stemming
- TokenFilterFactory stemmFilterFactory = new
JapaneseKatakanaStemFilterFactory();
- stemmFilterFactory.init(STEMM_FILTER_CONFIG);
- stemmFilterFactory.setLuceneMatchVersion(LUCENE_VERSION);
+ TokenFilterFactory stemmFilterFactory = new
JapaneseKatakanaStemFilterFactory(STEMM_FILTER_CONFIG);
filterFactories.add(stemmFilterFactory);
}
Modified:
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java?rev=1525556&r1=1525555&r2=1525556&view=diff
==============================================================================
---
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
(original)
+++
stanbol/trunk/enhancement-engines/topic/engine/src/main/java/org/apache/stanbol/enhancer/topic/EmbeddedSolrHelper.java
Mon Sep 23 11:23:33 2013
@@ -29,6 +29,7 @@ import org.apache.solr.client.solrj.embe
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
import org.xml.sax.SAXException;
/**
@@ -78,10 +79,19 @@ public class EmbeddedSolrHelper {
IOUtils.copy(is, new FileOutputStream(solrConfigFile));
// create the embedded server
- CoreContainer coreContainer = new
CoreContainer(solrFolder.getAbsolutePath(), solrFile);
+ SolrResourceLoader loader = new
SolrResourceLoader(solrFolder.getAbsolutePath());
+ CoreContainer coreContainer = new CoreContainer(loader);
+ //NOTE: with Solr 4.4 we need to call coreContainer.load() otherwise we
+ //would be affected by the issue stated at
+
//http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201301.mbox/%3CB7B8B36F1A0BE24F842758C318E56E925EB334%40EXCHDB2.na1.ad.group%3E
+ //while this was introduced with 4.1 this only affects this code with
4.4
+ //as with an API change the methods implicitly calling load() where
+ //removed.
+ coreContainer.load();
CoreDescriptor coreDescriptor = new CoreDescriptor(coreContainer,
coreId,
solrCoreFolder.getAbsolutePath());
SolrCore core = coreContainer.create(coreDescriptor);
+// coreContainer.createAndLoad(solrHome, configFile)load();
coreContainer.register(coreId, core, true);
return new EmbeddedSolrServer(coreContainer, coreId);
}