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

lucene-solr:branch_7x: SOLR-10513: Implement .equals() for LuceneLevenshteinDistance.

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_7x a4f60c286 -> 6d771dcc9


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/6d771dcc
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6d771dcc
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6d771dcc

Branch: refs/heads/branch_7x
Commit: 6d771dcc9f0c6cbb33b1b5cf6c60f126713d9555
Parents: a4f60c2
Author: jdyer1 <jd...@apache.org>
Authored: Fri Apr 13 11:10:21 2018 -0500
Committer: jdyer1 <jd...@apache.org>
Committed: Fri Apr 13 11:13:56 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/6d771dcc/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/6d771dcc/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9702773..1938465 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -134,6 +134,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/6d771dcc/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/6d771dcc/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