Skip to content

Commit d25c967

Browse files
olcbeanDaveCTurner
authored andcommitted
Deprecate jarowinkler in favor of jaro_winkler (#27526)
Jaro and Winkler are two people, so we should use the same naming convention as for Damerau–Levenshtein.
1 parent 41f73e0 commit d25c967

File tree

6 files changed

+29
-14
lines changed

6 files changed

+29
-14
lines changed

core/src/main/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGeneratorBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ String sort() {
218218
* based on Damerau-Levenshtein algorithm.
219219
* <li><code>levenshtein</code> - String distance algorithm based on
220220
* Levenshtein edit distance algorithm.
221-
* <li><code>jarowinkler</code> - String distance algorithm based on
221+
* <li><code>jaro_winkler</code> - String distance algorithm based on
222222
* Jaro-Winkler algorithm.
223223
* <li><code>ngram</code> - String distance algorithm based on character
224224
* n-grams.
@@ -474,9 +474,10 @@ static StringDistance resolveDistance(String distanceVal) {
474474
return new LevensteinDistance();
475475
} else if ("levenshtein".equals(distanceVal)) {
476476
return new LevensteinDistance();
477-
// TODO Jaro and Winkler are 2 people - so apply same naming logic
478-
// as damerau_levenshtein
479477
} else if ("jarowinkler".equals(distanceVal)) {
478+
DEPRECATION_LOGGER.deprecated("Deprecated distance [jarowinkler] used, replaced by [jaro_winkler]");
479+
return new JaroWinklerDistance();
480+
} else if ("jaro_winkler".equals(distanceVal)) {
480481
return new JaroWinklerDistance();
481482
} else if ("ngram".equals(distanceVal)) {
482483
return new NGramDistance();

core/src/main/java/org/elasticsearch/search/suggest/term/TermSuggestionBuilder.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public SortBy sort() {
221221
* Damerau-Levenshtein algorithm.
222222
* <li><code>levenshtein</code> - String distance algorithm based on
223223
* Levenshtein edit distance algorithm.
224-
* <li><code>jarowinkler</code> - String distance algorithm based on
224+
* <li><code>jaro_winkler</code> - String distance algorithm based on
225225
* Jaro-Winkler algorithm.
226226
* <li><code>ngram</code> - String distance algorithm based on character
227227
* n-grams.
@@ -556,7 +556,7 @@ public StringDistance toLucene() {
556556
}
557557
},
558558
/** String distance algorithm based on Jaro-Winkler algorithm. */
559-
JAROWINKLER {
559+
JARO_WINKLER {
560560
@Override
561561
public StringDistance toLucene() {
562562
return new JaroWinklerDistance();
@@ -596,7 +596,10 @@ public static StringDistanceImpl resolve(final String str) {
596596
case "ngram":
597597
return NGRAM;
598598
case "jarowinkler":
599-
return JAROWINKLER;
599+
DEPRECATION_LOGGER.deprecated("Deprecated distance [jarowinkler] used, replaced by [jaro_winkler]");
600+
return JARO_WINKLER;
601+
case "jaro_winkler":
602+
return JARO_WINKLER;
600603
default: throw new IllegalArgumentException("Illegal distance option " + str);
601604
}
602605
}

core/src/test/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGeneratorTests.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public void testFromString() {
7676
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("internal"), equalTo(DirectSpellChecker.INTERNAL_LEVENSHTEIN));
7777
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("damerau_levenshtein"), instanceOf(LuceneLevenshteinDistance.class));
7878
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("levenshtein"), instanceOf(LevensteinDistance.class));
79-
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("jaroWinkler"), instanceOf(JaroWinklerDistance.class));
79+
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("jaro_winkler"), instanceOf(JaroWinklerDistance.class));
8080
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("ngram"), instanceOf(NGramDistance.class));
8181

8282
expectThrows(IllegalArgumentException.class, () -> DirectCandidateGeneratorBuilder.resolveDistance("doesnt_exist"));
@@ -88,6 +88,11 @@ public void testLevensteinDeprecation() {
8888
assertWarnings("Deprecated distance [levenstein] used, replaced by [levenshtein]");
8989
}
9090

91+
public void testJaroWinklerDeprecation() {
92+
assertThat(DirectCandidateGeneratorBuilder.resolveDistance("jaroWinkler"), instanceOf(JaroWinklerDistance.class));
93+
assertWarnings("Deprecated distance [jarowinkler] used, replaced by [jaro_winkler]");
94+
}
95+
9196
private static DirectCandidateGeneratorBuilder mutate(DirectCandidateGeneratorBuilder original) throws IOException {
9297
DirectCandidateGeneratorBuilder mutation = copy(original);
9398
List<Supplier<DirectCandidateGeneratorBuilder>> mutators = new ArrayList<>();
@@ -212,7 +217,8 @@ public static DirectCandidateGeneratorBuilder randomCandidateGenerator() {
212217
maybeSet(generator::postFilter, randomAlphaOfLengthBetween(1, 20));
213218
maybeSet(generator::size, randomIntBetween(1, 20));
214219
maybeSet(generator::sort, randomFrom("score", "frequency"));
215-
maybeSet(generator::stringDistance, randomFrom("internal", "damerau_levenshtein", "levenshtein", "jarowinkler", "ngram"));
220+
maybeSet(generator::stringDistance,
221+
randomFrom("internal", "damerau_levenshtein", "levenshtein", "jaro_winkler", "ngram"));
216222
maybeSet(generator::suggestMode, randomFrom("missing", "popular", "always"));
217223
return generator;
218224
}

core/src/test/java/org/elasticsearch/search/suggest/term/StringDistanceImplTests.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void testValidOrdinals() {
3939
assertThat(StringDistanceImpl.INTERNAL.ordinal(), equalTo(0));
4040
assertThat(StringDistanceImpl.DAMERAU_LEVENSHTEIN.ordinal(), equalTo(1));
4141
assertThat(StringDistanceImpl.LEVENSHTEIN.ordinal(), equalTo(2));
42-
assertThat(StringDistanceImpl.JAROWINKLER.ordinal(), equalTo(3));
42+
assertThat(StringDistanceImpl.JARO_WINKLER.ordinal(), equalTo(3));
4343
assertThat(StringDistanceImpl.NGRAM.ordinal(), equalTo(4));
4444
}
4545

@@ -48,7 +48,7 @@ public void testFromString() {
4848
assertThat(StringDistanceImpl.resolve("internal"), equalTo(StringDistanceImpl.INTERNAL));
4949
assertThat(StringDistanceImpl.resolve("damerau_levenshtein"), equalTo(StringDistanceImpl.DAMERAU_LEVENSHTEIN));
5050
assertThat(StringDistanceImpl.resolve("levenshtein"), equalTo(StringDistanceImpl.LEVENSHTEIN));
51-
assertThat(StringDistanceImpl.resolve("jarowinkler"), equalTo(StringDistanceImpl.JAROWINKLER));
51+
assertThat(StringDistanceImpl.resolve("jaro_winkler"), equalTo(StringDistanceImpl.JARO_WINKLER));
5252
assertThat(StringDistanceImpl.resolve("ngram"), equalTo(StringDistanceImpl.NGRAM));
5353

5454
final String doesntExist = "doesnt_exist";
@@ -63,12 +63,17 @@ public void testLevensteinDeprecation() {
6363
assertWarnings("Deprecated distance [levenstein] used, replaced by [levenshtein]");
6464
}
6565

66+
public void testJaroWinklerDeprecation() {
67+
assertThat(StringDistanceImpl.resolve("jaroWinkler"), equalTo(StringDistanceImpl.JARO_WINKLER));
68+
assertWarnings("Deprecated distance [jarowinkler] used, replaced by [jaro_winkler]");
69+
}
70+
6671
@Override
6772
public void testWriteTo() throws IOException {
6873
assertWriteToStream(StringDistanceImpl.INTERNAL, 0);
6974
assertWriteToStream(StringDistanceImpl.DAMERAU_LEVENSHTEIN, 1);
7075
assertWriteToStream(StringDistanceImpl.LEVENSHTEIN, 2);
71-
assertWriteToStream(StringDistanceImpl.JAROWINKLER, 3);
76+
assertWriteToStream(StringDistanceImpl.JARO_WINKLER, 3);
7277
assertWriteToStream(StringDistanceImpl.NGRAM, 4);
7378
}
7479

@@ -77,7 +82,7 @@ public void testReadFrom() throws IOException {
7782
assertReadFromStream(0, StringDistanceImpl.INTERNAL);
7883
assertReadFromStream(1, StringDistanceImpl.DAMERAU_LEVENSHTEIN);
7984
assertReadFromStream(2, StringDistanceImpl.LEVENSHTEIN);
80-
assertReadFromStream(3, StringDistanceImpl.JAROWINKLER);
85+
assertReadFromStream(3, StringDistanceImpl.JARO_WINKLER);
8186
assertReadFromStream(4, StringDistanceImpl.NGRAM);
8287
}
8388

core/src/test/java/org/elasticsearch/search/suggest/term/TermSuggestionBuilderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ private static StringDistanceImpl randomStringDistance() {
100100
case 0: return StringDistanceImpl.INTERNAL;
101101
case 1: return StringDistanceImpl.DAMERAU_LEVENSHTEIN;
102102
case 2: return StringDistanceImpl.LEVENSHTEIN;
103-
case 3: return StringDistanceImpl.JAROWINKLER;
103+
case 3: return StringDistanceImpl.JARO_WINKLER;
104104
case 4: return StringDistanceImpl.NGRAM;
105105
default: throw new IllegalArgumentException("No string distance algorithm with an ordinal of " + randomVal);
106106
}

docs/reference/search/suggesters/term-suggest.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,5 @@ doesn't take the query into account that is part of request.
118118
Damerau-Levenshtein algorithm.
119119
`levenshtein` - String distance algorithm based on Levenshtein edit distance
120120
algorithm.
121-
`jarowinkler` - String distance algorithm based on Jaro-Winkler algorithm.
121+
`jaro_winkler` - String distance algorithm based on Jaro-Winkler algorithm.
122122
`ngram` - String distance algorithm based on character n-grams.

0 commit comments

Comments
 (0)