You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2013/05/15 00:09:15 UTC

svn commit: r1482619 - in /lucene/dev/branches/lucene_solr_4_3: ./ dev-tools/ lucene/ lucene/analysis/ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/ lucene/analys...

Author: hossman
Date: Tue May 14 22:09:13 2013
New Revision: 1482619

URL: http://svn.apache.org/r1482619
Log:
SOLR-4813: Fix SynonymFilterFactory to allow init parameters for tokenizer factory used when parsing synonyms file (merge r1482527; and r1479892 for needed enhancements in BaseTokenStreamFactoryTestCase)

Modified:
    lucene/dev/branches/lucene_solr_4_3/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/dev-tools/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/BUILD.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/JRE_VERSION_MIGRATION.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/LICENSE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/MIGRATE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/README.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/BaseTokenStreamFactoryTestCase.java   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/backwards/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/benchmark/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/classification/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/classification/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/classification/ivy.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/classification/src/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/codecs/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/common-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/search/TestSort.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/demo/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/facet/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/grouping/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/highlighter/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/ivy-settings.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/join/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/licenses/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/memory/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/misc/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/module-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/queries/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/queryparser/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/sandbox/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/site/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/spatial/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/suggest/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/lucene/tools/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/README.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/cloud-dev/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/common-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/contrib/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/core/src/test/org/apache/solr/core/TestConfig.java   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/example/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpclient-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpclient-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpcore-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpcore-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpmime-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/licenses/httpmime-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/scripts/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/site/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/solrj/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_3/solr/webapp/   (props changed)

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/CHANGES.txt?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/CHANGES.txt Tue May 14 22:09:13 2013
@@ -8,7 +8,8 @@ http://s.apache.org/luceneversions
 
 Bug Fixes
 
-
+* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
+  tokenizer factory used when parsing synonyms file.  (Shingo Sasaki, hossman)
 
 ======================= Lucene 4.3.0 =======================
 

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java Tue May 14 22:09:13 2013
@@ -26,6 +26,7 @@ import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CodingErrorAction;
 import java.text.ParseException;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -54,19 +55,27 @@ final class FSTSynonymFilterFactory exte
   private final String synonyms;
   private final String format;
   private final boolean expand;
+  private final Map<String, String> tokArgs = new HashMap<String, String>();
 
   private SynonymMap map;
   
   public FSTSynonymFilterFactory(Map<String,String> args) {
     super(args);
     ignoreCase = getBoolean(args, "ignoreCase", false);
+    synonyms = require(args, "synonyms");
+    format = get(args, "format");
+    expand = getBoolean(args, "expand", true);
+
     tokenizerFactory = get(args, "tokenizerFactory");
     if (tokenizerFactory != null) {
       assureMatchVersion();
+      tokArgs.put("luceneMatchVersion", getLuceneMatchVersion().toString());
+      for (Iterator<String> itr = args.keySet().iterator(); itr.hasNext();) {
+        String key = itr.next();
+        tokArgs.put(key.replaceAll("^tokenizerFactory\\.",""), args.get(key));
+        itr.remove();
+      }
     }
-    synonyms = require(args, "synonyms");
-    format = get(args, "format");
-    expand = getBoolean(args, "expand", true);
     if (!args.isEmpty()) {
       throw new IllegalArgumentException("Unknown parameters: " + args);
     }
@@ -155,11 +164,9 @@ final class FSTSynonymFilterFactory exte
   
   // (there are no tests for this functionality)
   private TokenizerFactory loadTokenizerFactory(ResourceLoader loader, String cname) throws IOException {
-    Map<String,String> args = new HashMap<String,String>();
-    args.put("luceneMatchVersion", getLuceneMatchVersion().toString());
     Class<? extends TokenizerFactory> clazz = loader.findClass(cname, TokenizerFactory.class);
     try {
-      TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(args);
+      TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(tokArgs);
       if (tokFactory instanceof ResourceLoaderAware) {
         ((ResourceLoaderAware) tokFactory).inform(loader);
       }

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java Tue May 14 22:09:13 2013
@@ -27,6 +27,7 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -48,6 +49,7 @@ final class SlowSynonymFilterFactory ext
   private final boolean ignoreCase;
   private final boolean expand;
   private final String tf;
+  private final Map<String, String> tokArgs = new HashMap<String, String>();
   
   public SlowSynonymFilterFactory(Map<String,String> args) {
     super(args);
@@ -56,6 +58,15 @@ final class SlowSynonymFilterFactory ext
     expand = getBoolean(args, "expand", true);
 
     tf = get(args, "tokenizerFactory");
+    if (tf != null) {
+      assureMatchVersion();
+      tokArgs.put("luceneMatchVersion", getLuceneMatchVersion().toString());
+      for (Iterator<String> itr = args.keySet().iterator(); itr.hasNext();) {
+        String key = itr.next();
+        tokArgs.put(key.replaceAll("^tokenizerFactory\\.",""), args.get(key));
+        itr.remove();
+      }
+    }
     if (!args.isEmpty()) {
       throw new IllegalArgumentException("Unknown parameters: " + args);
     }
@@ -169,11 +180,9 @@ final class SlowSynonymFilterFactory ext
   }
 
   private TokenizerFactory loadTokenizerFactory(ResourceLoader loader, String cname) throws IOException {
-    Map<String,String> args = new HashMap<String,String>();
-    args.put("luceneMatchVersion", getLuceneMatchVersion().toString());
     Class<? extends TokenizerFactory> clazz = loader.findClass(cname, TokenizerFactory.class);
     try {
-      TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(args);
+      TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(tokArgs);
       if (tokFactory instanceof ResourceLoaderAware) {
         ((ResourceLoaderAware) tokFactory).inform(loader);
       }

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java Tue May 14 22:09:13 2013
@@ -36,9 +36,18 @@ import org.apache.lucene.analysis.util.T
  *     &lt;tokenizer class="solr.WhitespaceTokenizerFactory"/&gt;
  *     &lt;filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" 
  *             format="solr" ignoreCase="false" expand="true" 
- *             tokenizerFactory="solr.WhitespaceTokenizerFactory"/&gt;
+ *             tokenizerFactory="solr.WhitespaceTokenizerFactory"
+ *             [optional tokenizer factory parameters]/&gt;
  *   &lt;/analyzer&gt;
  * &lt;/fieldType&gt;</pre>
+ * 
+ * <p>
+ * An optional param name prefix of "tokenizerFactory." may be used for any 
+ * init params that the SynonymFilterFactory needs to pass to the specified 
+ * TokenizerFactory.  If the TokenizerFactory expects an init parameters with 
+ * the same name as an init param used by the SynonymFilterFactory, the prefix 
+ * is mandatory.
+ * </p>
  */
 public class SynonymFilterFactory extends TokenFilterFactory implements ResourceLoaderAware {
   private final TokenFilterFactory delegator;
@@ -67,4 +76,14 @@ public class SynonymFilterFactory extend
   public void inform(ResourceLoader loader) throws IOException {
     ((ResourceLoaderAware) delegator).inform(loader);
   }
+
+  /**
+   * Access to the delegator TokenFilterFactory for test verification
+   *
+   * @deprecated Method exists only for testing 4x, will be removed in 5.0
+   * @lucene.internal
+   */
+  TokenFilterFactory getDelegator() {
+    return delegator;
+  }
 }

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java Tue May 14 22:09:13 2013
@@ -19,10 +19,13 @@ package org.apache.lucene.analysis.synon
 
 import java.io.Reader;
 import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.synonym.SynonymFilter;
+import org.apache.lucene.analysis.pattern.PatternTokenizerFactory;
+import org.apache.lucene.analysis.util.TokenFilterFactory;
 import org.apache.lucene.analysis.util.BaseTokenStreamFactoryTestCase;
 import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.StringMockResourceLoader;
@@ -91,4 +94,83 @@ public class TestSynonymFilterFactory ex
       assertTrue(expected.getMessage().contains("Unknown parameters"));
     }
   }
+
+  static final String TOK_SYN_ARG_VAL = "argument";
+  static final String TOK_FOO_ARG_VAL = "foofoofoo";
+
+  /** Test that we can parse TokenierFactory's arguments */
+  public void testTokenizerFactoryArguments() throws Exception {
+    // diff versions produce diff delegator behavior,
+    // all should be (mostly) equivilent for our test purposes.
+    doTestTokenizerFactoryArguments(Version.LUCENE_33, 
+                                    SlowSynonymFilterFactory.class);
+    doTestTokenizerFactoryArguments(Version.LUCENE_34, 
+                                    FSTSynonymFilterFactory.class);
+    doTestTokenizerFactoryArguments(Version.LUCENE_35, 
+                                    FSTSynonymFilterFactory.class);
+
+    doTestTokenizerFactoryArguments(Version.LUCENE_CURRENT, 
+                                    FSTSynonymFilterFactory.class);
+  }
+
+  protected void doTestTokenizerFactoryArguments(final Version ver, 
+                                                 final Class delegatorClass) 
+    throws Exception {
+
+    final String clazz = PatternTokenizerFactory.class.getName();
+    TokenFilterFactory factory = null;
+
+    // simple arg form
+    factory = tokenFilterFactory("Synonym", ver,
+        "synonyms", "synonyms.txt", 
+        "tokenizerFactory", clazz,
+        "pattern", "(.*)",
+        "group", "0");
+    assertDelegator(factory, delegatorClass);
+
+    // prefix
+    factory = tokenFilterFactory("Synonym", ver,
+        "synonyms", "synonyms.txt", 
+        "tokenizerFactory", clazz,
+        "tokenizerFactory.pattern", "(.*)",
+        "tokenizerFactory.group", "0");
+    assertDelegator(factory, delegatorClass);
+
+    // sanity check that sub-PatternTokenizerFactory fails w/o pattern
+    try {
+      factory = tokenFilterFactory("Synonym", ver,
+          "synonyms", "synonyms.txt", 
+          "tokenizerFactory", clazz);
+      fail("tokenizerFactory should have complained about missing pattern arg");
+    } catch (Exception expected) {
+      // :NOOP:
+    }
+
+    // sanity check that sub-PatternTokenizerFactory fails on unexpected
+    try {
+      factory = tokenFilterFactory("Synonym", ver,
+          "synonyms", "synonyms.txt", 
+          "tokenizerFactory", clazz,
+          "tokenizerFactory.pattern", "(.*)",
+          "tokenizerFactory.bogusbogusbogus", "bogus",
+          "tokenizerFactory.group", "0");
+      fail("tokenizerFactory should have complained about missing pattern arg");
+    } catch (Exception expected) {
+      // :NOOP:
+    }
+  }
+  private static void assertDelegator(final TokenFilterFactory factory,
+                                      final Class delegatorClass) {
+    assertNotNull(factory);
+    assertTrue("factory not expected class: " + factory.getClass(),
+               factory instanceof SynonymFilterFactory);
+    SynonymFilterFactory synFac = (SynonymFilterFactory) factory;
+    Object delegator = synFac.getDelegator();
+    assertNotNull(delegator);
+    assertTrue("delegator not expected class: " + delegator.getClass(),
+               delegatorClass.isInstance(delegator));
+    
+  }
 }
+
+

Modified: lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/BaseTokenStreamFactoryTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/BaseTokenStreamFactoryTestCase.java?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/BaseTokenStreamFactoryTestCase.java (original)
+++ lucene/dev/branches/lucene_solr_4_3/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/BaseTokenStreamFactoryTestCase.java Tue May 14 22:09:13 2013
@@ -72,14 +72,23 @@ public abstract class BaseTokenStreamFac
     }
     return factory;
   }
-  
+
   /** 
    * Returns a fully initialized TokenizerFactory with the specified name and key-value arguments.
    * {@link ClasspathResourceLoader} is used for loading resources, so any required ones should
    * be on the test classpath.
    */
   protected TokenizerFactory tokenizerFactory(String name, String... keysAndValues) throws Exception {
-    return tokenizerFactory(name, TEST_VERSION_CURRENT, new ClasspathResourceLoader(getClass()), keysAndValues);
+    return tokenizerFactory(name, TEST_VERSION_CURRENT, keysAndValues);
+  }
+
+  /** 
+   * Returns a fully initialized TokenizerFactory with the specified name and key-value arguments.
+   * {@link ClasspathResourceLoader} is used for loading resources, so any required ones should
+   * be on the test classpath.
+   */
+  protected TokenizerFactory tokenizerFactory(String name, Version version, String... keysAndValues) throws Exception {
+    return tokenizerFactory(name, version, new ClasspathResourceLoader(getClass()), keysAndValues);
   }
   
   /** 
@@ -89,14 +98,23 @@ public abstract class BaseTokenStreamFac
   protected TokenizerFactory tokenizerFactory(String name, Version matchVersion, ResourceLoader loader, String... keysAndValues) throws Exception {
     return (TokenizerFactory) analysisFactory(TokenizerFactory.lookupClass(name), matchVersion, loader, keysAndValues);
   }
-  
+
+  /** 
+   * Returns a fully initialized TokenFilterFactory with the specified name and key-value arguments.
+   * {@link ClasspathResourceLoader} is used for loading resources, so any required ones should
+   * be on the test classpath.
+   */
+  protected TokenFilterFactory tokenFilterFactory(String name, Version version, String... keysAndValues) throws Exception {
+    return tokenFilterFactory(name, version, new ClasspathResourceLoader(getClass()), keysAndValues);
+  }
+
   /** 
    * Returns a fully initialized TokenFilterFactory with the specified name and key-value arguments.
    * {@link ClasspathResourceLoader} is used for loading resources, so any required ones should
    * be on the test classpath.
    */
   protected TokenFilterFactory tokenFilterFactory(String name, String... keysAndValues) throws Exception {
-    return tokenFilterFactory(name, TEST_VERSION_CURRENT, new ClasspathResourceLoader(getClass()), keysAndValues);
+    return tokenFilterFactory(name, TEST_VERSION_CURRENT, keysAndValues);
   }
   
   /** 

Modified: lucene/dev/branches/lucene_solr_4_3/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_3/solr/CHANGES.txt?rev=1482619&r1=1482618&r2=1482619&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_3/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_3/solr/CHANGES.txt Tue May 14 22:09:13 2013
@@ -57,6 +57,10 @@ Bug Fixes
 * SOLR-4807: The zkcli script now works with log4j. The zkcli.bat script
   was broken on Windows in 4.3.0, now it works. (Shawn Heisey)
 
+* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
+  tokenizer factory used when parsing synonyms file.  (Shingo Sasaki, hossman)
+  
+
 Other Changes
 ----------------------