You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/07/13 19:20:32 UTC
[lucene-solr] branch reference_impl updated: #116 - Just eat this
SolrResourceLoader gremlin, can't be lived with.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/reference_impl by this push:
new 66288af #116 - Just eat this SolrResourceLoader gremlin, can't be lived with.
66288af is described below
commit 66288aff8780dd38a7a2e20f5c054d5284d27e24
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Jul 13 14:20:13 2020 -0500
#116 - Just eat this SolrResourceLoader gremlin, can't be lived with.
---
.../org/apache/solr/core/SolrResourceLoader.java | 94 +++++++++++++++++-----
.../org/apache/solr/core/ResourceLoaderTest.java | 5 +-
.../search/facet/TestCloudJSONFacetSKGEquiv.java | 13 ++-
.../solr/common/util/TestFastJavabinDecoder.java | 1 +
4 files changed, 87 insertions(+), 26 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 78ec02e..28c0595 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -477,6 +477,69 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
return findClass(cname, expectedType, empty);
}
+ private static final Map<String,String> TRANS_MAP;
+ static {
+ Map<String,String> map = new HashMap<>(64);
+ map.put("solr.WordDelimiterGraphFilterFactory","org.apache.lucene.analysis.miscellaneous.WordDelimiterGraphFilterFactory");
+ map.put("solr.LowerCaseFilterFactory", "org.apache.lucene.analysis.core.LowerCaseFilterFactory");
+ map.put("solr.FlattenGraphFilterFactory", "org.apache.lucene.analysis.core.FlattenGraphFilterFactory");
+ map.put("solr.StopFilterFactory", "org.apache.lucene.analysis.core.StopFilterFactory");
+ map.put("solr.SynonymGraphFilterFactory", "org.apache.lucene.analysis.synonym.SynonymGraphFilterFactory");
+ map.put("solr.KeywordMarkerFilterFactory", "org.apache.lucene.analysis.miscellaneous.KeywordMarkerFilterFactory");
+ map.put("solr.PorterStemFilterFactory", "org.apache.lucene.analysis.en.PorterStemFilterFactory");
+ map.put("solr.DelimitedBoostTokenFilterFactory", "org.apache.lucene.analysis.boost.DelimitedBoostTokenFilterFactory");
+ map.put("solr.LetterTokenizerFactory", "org.apache.lucene.analysis.core.LetterTokenizerFactory");
+ map.put("solr.StandardTokenizerFactory", "org.apache.lucene.analysis.standard.StandardTokenizerFactory");
+ map.put("solr.HTMLStripCharFilterFactory", "org.apache.lucene.analysis.charfilter.HTMLStripCharFilterFactory");
+ map.put("solr.MappingCharFilterFactory", "org.apache.lucene.analysis.charfilter.MappingCharFilterFactory");
+ map.put("solr.PatternReplaceFilterFactory", "org.apache.lucene.analysis.pattern.PatternReplaceFilterFactory");
+ map.put("solr.LengthFilterFactory", "org.apache.lucene.analysis.miscellaneous.LengthFilterFactory");
+ map.put("solr.RemoveDuplicatesTokenFilterFactory", "org.apache.lucene.analysis.miscellaneous.RemoveDuplicatesTokenFilterFactory");
+ map.put("solr.WhitespaceTokenizerFactory", "org.apache.lucene.analysis.core.WhitespaceTokenizerFactory");
+ map.put("solr.ShingleFilterFactory", "org.apache.lucene.analysis.shingle.ShingleFilterFactory");
+ map.put("solr.WordDelimiterFilterFactory", "org.apache.lucene.analysis.miscellaneous.WordDelimiterFilterFactory");
+ map.put("solr.PatternTokenizerFactory", "org.apache.lucene.analysis.pattern.PatternTokenizerFactory");
+ map.put("solr.KeywordTokenizerFactory", "org.apache.lucene.analysis.core.KeywordTokenizerFactory");
+ map.put("solr.PathHierarchyTokenizerFactory", "org.apache.lucene.analysis.path.PathHierarchyTokenizerFactory");
+ map.put("solr.DelimitedPayloadTokenFilterFactory", "org.apache.lucene.analysis.payloads.DelimitedPayloadTokenFilterFactory");
+ map.put("solr.EnglishMinimalStemFilterFactory", "org.apache.lucene.analysis.en.EnglishMinimalStemFilterFactory");
+ map.put("solr.TrimFilterFactory", "org.apache.lucene.analysis.miscellaneous.TrimFilterFactory");
+ map.put("solr.LimitTokenCountFilterFactory", "org.apache.lucene.analysis.miscellaneous.LimitTokenCountFilterFactory");
+ map.put("solr.ICUTokenizerFactory", "org.apache.lucene.analysis.icu.segmentation.ICUTokenizerFactory");
+ map.put("solr.ICUFoldingFilterFactory", "org.apache.lucene.analysis.icu.ICUFoldingFilterFactory");
+ map.put("solr.ProtectedTermFilterFactory", "org.apache.lucene.analysis.miscellaneous.ProtectedTermFilterFactory");
+ map.put("solr.ReversedWildcardFilterFactory", "org.apache.solr.analysis.ReversedWildcardFilterFactory");
+ map.put("solr.ASCIIFoldingFilterFactory", "org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory");
+ map.put("solr.EnglishPossessiveFilterFactory", "org.apache.lucene.analysis.en.EnglishPossessiveFilterFactory");
+ map.put("solr.NGramTokenizerFactory", "org.apache.lucene.analysis.ngram.NGramTokenizerFactory");
+ map.put("solr.ManagedStopFilterFactory", "org.apache.solr.rest.schema.analysis.ManagedStopFilterFactory");
+ map.put("solr.ManagedSynonymFilterFactory", "org.apache.solr.rest.schema.analysis.ManagedSynonymFilterFactory");
+ map.put("solr.ManagedSynonymGraphFilterFactory", "org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory");
+ map.put("solr.OpenNLPTokenizerFactory", "org.apache.lucene.analysis.opennlp.OpenNLPTokenizerFactory");
+ map.put("solr.ICUNormalizer2FilterFactory", "org.apache.lucene.analysis.icu.ICUNormalizer2FilterFactory");
+ map.put("solr.DoubleMetaphoneFilterFactory", "org.apache.lucene.analysis.phonetic.DoubleMetaphoneFilterFactory");
+ map.put("solr.ClassicTokenizerFactory", "org.apache.lucene.analysis.standard.ClassicTokenizerFactory");
+ map.put("solr.GreekLowerCaseFilterFactory", "org.apache.lucene.analysis.el.GreekLowerCaseFilterFactory");
+ map.put("solr.ConcatenateGraphFilterFactory", "org.apache.lucene.analysis.miscellaneous.ConcatenateGraphFilterFactory");
+ map.put("solr.JapaneseTokenizerFactory", "org.apache.lucene.analysis.ja.JapaneseTokenizerFactory");
+ map.put("solr.CJKWidthFilterFactory", "org.apache.lucene.analysis.cjk.CJKWidthFilterFactory");
+ map.put("solr.JapaneseReadingFormFilterFactory", "org.apache.lucene.analysis.ja.JapaneseReadingFormFilterFactory");
+ map.put("solr.TurkishLowerCaseFilterFactory", "org.apache.lucene.analysis.tr.TurkishLowerCaseFilterFactory");
+ map.put("solr.PersianNormalizationFilterFactory", "org.apache.lucene.analysis.fa.PersianNormalizationFilterFactory");
+ map.put("solr.ArabicNormalizationFilterFactory", "org.apache.lucene.analysis.ar.ArabicNormalizationFilterFactory");
+ map.put("solr.IndicNormalizationFilterFactory", "org.apache.lucene.analysis.in.IndicNormalizationFilterFactory");
+ map.put("solr.HindiNormalizationFilterFactory", "org.apache.lucene.analysis.hi.HindiNormalizationFilterFactory");
+ map.put("solr.GermanNormalizationFilterFactory", "org.apache.lucene.analysis.de.GermanNormalizationFilterFactory");
+ map.put("solr.ElisionFilterFactory", "org.apache.lucene.analysis.util.ElisionFilterFactory");
+ map.put("solr.FrenchLightStemFilterFactory", "org.apache.lucene.analysis.fr.FrenchLightStemFilterFactory");
+ map.put("solr.ICUTransformFilterFactory", "org.apache.lucene.analysis.icu.ICUTransformFilterFactory");
+ map.put("solr.PatternReplaceCharFilterFactory", "org.apache.lucene.analysis.pattern.PatternReplaceCharFilterFactory");
+ map.put("solr.ClassicFilterFactory", "org.apache.lucene.analysis.standard.ClassicFilterFactory");
+ map.put("solr.KStemFilterFactory", "org.apache.lucene.analysis.en.KStemFilterFactory");
+
+ TRANS_MAP = Collections.unmodifiableMap(map);
+ }
+
/**
* This method loads a class either with its FQN or a short-name (solr.class-simplename or class-simplename).
* It tries to load the class with the name that is given first and if it fails, it tries all the known
@@ -498,6 +561,16 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
}
}
+ String trans = TRANS_MAP.get(cname);
+ if (trans != null) {
+ try {
+ return Class.forName(trans, true, classLoader).asSubclass(expectedType);
+ } catch (ClassNotFoundException e) {
+
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, name +" Error loading class '" + cname + "'", e);
+ }
+ }
+
if (subpackages == null || subpackages.length == 0 || subpackages == packages) {
subpackages = packages;
String c = classNameCache.get(cname);
@@ -531,26 +604,7 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
// ignore... assume first exception is best.
}
}
- // first try legacy analysis patterns, now replaced by Lucene's Analysis package:
- final Matcher m = legacyAnalysisPattern.matcher(cname);
- if (m.matches()) {
- final String name = m.group(4);
- log.trace("Trying to load class from analysis SPI using name='{}'", name);
- try {
- if (CharFilterFactory.class.isAssignableFrom(expectedType)) {
- return clazz = CharFilterFactory.lookupClass(name).asSubclass(expectedType);
- } else if (TokenizerFactory.class.isAssignableFrom(expectedType)) {
- return clazz = TokenizerFactory.lookupClass(name).asSubclass(expectedType);
- } else if (TokenFilterFactory.class.isAssignableFrom(expectedType)) {
- return clazz = TokenFilterFactory.lookupClass(name).asSubclass(expectedType);
- } else {
- log.warn("'{}' looks like an analysis factory, but caller requested different class type: {}", cname, expectedType.getName());
- }
- } catch (IllegalArgumentException ex) {
- // ok, we fall back to legacy loading
- log.info("IllegalArgumentException trying to load analysis class", ex);
- }
- }
+
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, name +" Error loading class '" + cname + "'" + " subpackages=" + Arrays.asList(subpackages), e);
}
diff --git a/solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java b/solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java
index 348ab67..0bbb705 100644
--- a/solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java
+++ b/solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java
@@ -217,9 +217,10 @@ public class ResourceLoaderTest extends SolrTestCaseJ4 {
Map<String,String> args = Map.of("minGramSize", "1", "maxGramSize", "2");
final String className = "solr.NGramTokenizerFactory";
+ // nocommit - uh, no
// We could fail here since the class name and expected type don't match, but instead we try to infer what the user actually meant
- TokenFilterFactory tff = loader.newInstance(className, TokenFilterFactory.class, new String[0], params, new Object[]{new HashMap<>(args)});
- assertNotNull("Did not load TokenFilter when asking for corresponding Tokenizer", tff);
+// TokenFilterFactory tff = loader.newInstance(className, TokenFilterFactory.class, new String[0], params, new Object[]{new HashMap<>(args)});
+// assertNotNull("Did not load TokenFilter when asking for TestFastJavabinDecodercorresponding Tokenizer", tff);
// This should work, but won't if earlier call succeeding corrupting the cache
TokenizerFactory tf = loader.newInstance(className, TokenizerFactory.class, new String[0], params, new Object[]{new HashMap<>(args)});
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKGEquiv.java b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKGEquiv.java
index b8edc60..9aaaa23 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKGEquiv.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKGEquiv.java
@@ -400,10 +400,15 @@ public class TestCloudJSONFacetSKGEquiv extends SolrCloudTestCase {
*/
public void testBespokeStructures() throws Exception {
// we don't need to test every field, just make sure we test enough fields to hit every suffix..
- final int maxFacetFieldNum = Collections.max(Arrays.asList(MULTI_STR_FIELD_SUFFIXES.length,
- MULTI_INT_FIELD_SUFFIXES.length,
- SOLO_STR_FIELD_SUFFIXES.length,
- SOLO_INT_FIELD_SUFFIXES.length));
+ final int maxFacetFieldNum;
+ if (TEST_NIGHTLY) {
+ maxFacetFieldNum = Collections.max(Arrays.asList(MULTI_STR_FIELD_SUFFIXES.length,
+ MULTI_INT_FIELD_SUFFIXES.length,
+ SOLO_STR_FIELD_SUFFIXES.length,
+ SOLO_INT_FIELD_SUFFIXES.length));
+ } else {
+ maxFacetFieldNum = 1;
+ }
for (int facetFieldNum = 0; facetFieldNum < maxFacetFieldNum; facetFieldNum++) {
for (String facetFieldName : Arrays.asList(soloStrField(facetFieldNum), multiStrField(facetFieldNum))) {
diff --git a/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java b/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
index ecbdf44..8135c55 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
@@ -42,6 +42,7 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
public void testTagRead() throws Exception {
BinaryRequestWriter.BAOS baos = new BinaryRequestWriter.BAOS();
+
FastOutputStream faos = FastOutputStream.wrap(baos);
try (JavaBinCodec codec = new JavaBinCodec(faos, null)) {