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;