You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/04/16 17:21:14 UTC

[34/46] lucene-solr:jira/solr-11833: SOLR-10513: Implement .equals() for LuceneLevenshteinDistance.

SOLR-10513: Implement .equals() for LuceneLevenshteinDistance.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/12bd5f94
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/12bd5f94
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/12bd5f94

Branch: refs/heads/jira/solr-11833
Commit: 12bd5f9448f70b9fdc450dac916dbd1a83edafbc
Parents: 9a149ad
Author: jdyer1 <jd...@apache.org>
Authored: Fri Apr 13 11:10:21 2018 -0500
Committer: jdyer1 <jd...@apache.org>
Committed: Fri Apr 13 11:12:46 2018 -0500

----------------------------------------------------------------------
 .../search/spell/LuceneLevenshteinDistance.java |  8 +++++
 solr/CHANGES.txt                                |  2 ++
 .../spelling/ConjunctionSolrSpellChecker.java   |  3 +-
 .../ConjunctionSolrSpellCheckerTest.java        | 35 ++++++++++++++++----
 4 files changed, 40 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/12bd5f94/lucene/suggest/src/java/org/apache/lucene/search/spell/LuceneLevenshteinDistance.java
----------------------------------------------------------------------
diff --git a/lucene/suggest/src/java/org/apache/lucene/search/spell/LuceneLevenshteinDistance.java b/lucene/suggest/src/java/org/apache/lucene/search/spell/LuceneLevenshteinDistance.java
index 3ba0bd3..21ca535 100644
--- a/lucene/suggest/src/java/org/apache/lucene/search/spell/LuceneLevenshteinDistance.java
+++ b/lucene/suggest/src/java/org/apache/lucene/search/spell/LuceneLevenshteinDistance.java
@@ -114,4 +114,12 @@ public final class LuceneLevenshteinDistance implements StringDistance {
     }
     return ref;
   }
+  
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) return true;
+    if (null == obj) return false;
+    return (getClass() == obj.getClass());
+  }
+  
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/12bd5f94/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 999d2f6..399a2a7 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -154,6 +154,8 @@ Bug Fixes
   (Rohit, Varun Thacker)
 
 * SOLR-12150: Fix a test bug in CdcrBidirectionalTest.testBiDir (Steve Rowe, Amrit Sarkar via Varun Thacker)
+
+* SOLR-10513: ConjunctionSolrSpellChecker did not work with LuceneLevenshteinDistance (Amrit Sarkar via James Dyer)
  
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/12bd5f94/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java b/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java
index 2daab28..f92919d 100644
--- a/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java
+++ b/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java
@@ -81,9 +81,8 @@ public class ConjunctionSolrSpellChecker extends SolrSpellChecker {
     checkers.add(checker);
   }
   
-  @SuppressWarnings("unchecked")
   @Override
-  public String init(NamedList config, SolrCore core) {
+  public String init(@SuppressWarnings("rawtypes") NamedList config, SolrCore core) {
     for (int i = 0; i < checkers.size(); i++) {
       SolrSpellChecker c = checkers.get(i);
       String dn = c.init(config, core);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/12bd5f94/solr/core/src/test/org/apache/solr/spelling/ConjunctionSolrSpellCheckerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/spelling/ConjunctionSolrSpellCheckerTest.java b/solr/core/src/test/org/apache/solr/spelling/ConjunctionSolrSpellCheckerTest.java
index 0df837f..8ec933b 100644
--- a/solr/core/src/test/org/apache/solr/spelling/ConjunctionSolrSpellCheckerTest.java
+++ b/solr/core/src/test/org/apache/solr/spelling/ConjunctionSolrSpellCheckerTest.java
@@ -18,27 +18,50 @@ package org.apache.solr.spelling;
 
 import java.io.IOException;
 
+import org.apache.lucene.search.spell.JaroWinklerDistance;
 import org.apache.lucene.search.spell.LevenshteinDistance;
+import org.apache.lucene.search.spell.LuceneLevenshteinDistance;
 import org.apache.lucene.search.spell.NGramDistance;
 import org.apache.lucene.search.spell.StringDistance;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.search.SolrIndexSearcher;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class ConjunctionSolrSpellCheckerTest extends LuceneTestCase {
   
+  public static final Class<?>[] AVAILABLE_DISTANCES = {LevenshteinDistance.class, LuceneLevenshteinDistance.class,
+      JaroWinklerDistance.class, NGramDistance.class};
+
   @Test
   public void test() throws Exception {
     ConjunctionSolrSpellChecker cssc = new ConjunctionSolrSpellChecker();
-    MockSolrSpellChecker levenstein1 = new MockSolrSpellChecker(new LevenshteinDistance());
-    MockSolrSpellChecker levenstein2 = new MockSolrSpellChecker(new LevenshteinDistance());
-    MockSolrSpellChecker ngram = new MockSolrSpellChecker(new NGramDistance());
+    @SuppressWarnings("unchecked")
+    Class<StringDistance> sameDistance = (Class<StringDistance>) AVAILABLE_DISTANCES[random().nextInt(AVAILABLE_DISTANCES.length)];
+    
+    StringDistance sameDistance1 = sameDistance.newInstance();
+    StringDistance sameDistance2 = sameDistance.newInstance();
+    
+    //NGramDistance defaults to 2, so we'll try 3 or 4 to ensure we have one that is not-equal.
+    StringDistance differentDistance = new NGramDistance(3);
+    if(sameDistance1.equals(differentDistance)) {
+      differentDistance = new NGramDistance(4);
+      if(sameDistance1.equals(differentDistance)) {
+        fail("Cannot set up test.  2 NGramDistances with different gram sizes should not be equal.");
+      }
+    }
+    Assert.assertEquals("The distance " + sameDistance + " does not properly implement equals.", sameDistance1, sameDistance2);
+    
+    
+    MockSolrSpellChecker checker1 = new MockSolrSpellChecker(sameDistance1);
+    MockSolrSpellChecker checker2 = new MockSolrSpellChecker(sameDistance2);
+    MockSolrSpellChecker checker3 = new MockSolrSpellChecker(differentDistance);
     
-    cssc.addChecker(levenstein1);
-    cssc.addChecker(levenstein2);
+    cssc.addChecker(checker1);
+    cssc.addChecker(checker2);
     try {
-      cssc.addChecker(ngram);
+      cssc.addChecker(checker3);
       fail("ConjunctionSolrSpellChecker should have thrown an exception about non-identical StringDistances.");
     } catch (IllegalArgumentException iae) {
       // correct behavior