You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2011/05/03 04:52:03 UTC

svn commit: r1098896 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/backwards/ solr/ solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java solr/src/test/org/apache/solr/analysis/TestSynonymMap.java

Author: ryan
Date: Tue May  3 02:52:02 2011
New Revision: 1098896

URL: http://svn.apache.org/viewvc?rev=1098896&view=rev
Log:
SOLR-2484: make SynonymFilterFactory more extensible

Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_3x/solr/   (props changed)
    lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java
    lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/analysis/TestSynonymMap.java

Modified: lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java?rev=1098896&r1=1098895&r2=1098896&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java Tue May  3 02:52:02 2011
@@ -59,6 +59,16 @@ public class SynonymFilterFactory extend
       tokFactory = loadTokenizerFactory( loader, tf, args );
     }
 
+    Iterable<String> wlist=loadRules( synonyms, loader );
+    
+    synMap = new SynonymMap(ignoreCase);
+    parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+  }
+  
+  /**
+   * @return a list of all rules
+   */
+  protected Iterable<String> loadRules( String synonyms, ResourceLoader loader ) {
     List<String> wlist=null;
     try {
       File synonymFile = new File(synonyms);
@@ -75,13 +85,12 @@ public class SynonymFilterFactory extend
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
-    synMap = new SynonymMap(ignoreCase);
-    parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+    return wlist;
   }
 
   private SynonymMap synMap;
 
-  static void parseRules(List<String> rules, SynonymMap map, String mappingSep,
+  static void parseRules(Iterable<String> rules, SynonymMap map, String mappingSep,
     String synSep, boolean expansion, TokenizerFactory tokFactory) {
     int count=0;
     for (String rule : rules) {

Modified: lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/analysis/TestSynonymMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/analysis/TestSynonymMap.java?rev=1098896&r1=1098895&r2=1098896&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/analysis/TestSynonymMap.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/analysis/TestSynonymMap.java Tue May  3 02:52:02 2011
@@ -17,6 +17,8 @@
 
 package org.apache.solr.analysis;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -24,6 +26,8 @@ import java.util.Map;
 
 import org.apache.lucene.analysis.Token;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.common.ResourceLoader;
+
 
 public class TestSynonymMap extends LuceneTestCase {
 
@@ -256,6 +260,43 @@ public class TestSynonymMap extends Luce
     assertTokIncludes( getSubSynonymMap( getSubSynonymMap( synMap, "ab" ), "bc" ), "cd", "gh" );
   }
   
+
+  public void testLoadRules() throws Exception {
+    Map<String, String> args = new HashMap<String, String>();
+    args.put( "synonyms", "something.txt" );
+    SynonymFilterFactory ff = new SynonymFilterFactory();
+    ff.init(args);
+    ff.inform( new ResourceLoader() {
+      @Override
+      public List<String> getLines(String resource) throws IOException {
+        if( !"something.txt".equals(resource) ) {
+          throw new RuntimeException( "should not get a differnt resource" );
+        }
+        List<String> rules = new ArrayList<String>();
+        rules.add( "a,b" );
+        return rules;
+      }
+
+      @Override
+      public Object newInstance(String cname, String... subpackages) {
+        throw new RuntimeException("stub");
+      }
+
+      @Override
+      public InputStream openResource(String resource) throws IOException {
+        throw new RuntimeException("stub");
+      }
+    });
+    
+    SynonymMap synMap = ff.getSynonymMap();
+    assertEquals( 2, synMap.submap.size() );
+    assertTokIncludes( synMap, "a", "a" );
+    assertTokIncludes( synMap, "a", "b" );
+    assertTokIncludes( synMap, "b", "a" );
+    assertTokIncludes( synMap, "b", "b" );
+  }
+  
+  
   private void assertTokIncludes( SynonymMap map, String src, String exp ) throws Exception {
     Token[] tokens = map.submap.get( src ).synonyms;
     boolean inc = false;