mirror of
https://github.com/i2p/i2p.i2p.git
synced 2024-12-06 19:27:00 +01:00
i2psnark, susimail: Normailze strings when searching (Gitlab #488)
to improve search for non-ASCII strings. Normalize both search and searched strings to NFKD when searching. NFKD is best because it is more efficient than NFKC and it removes formatting distinctions. This results in the best fuzzy matching.
This commit is contained in:
@@ -13,6 +13,7 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.Collator;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.Normalizer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -875,14 +876,14 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (term.length() > 0) {
|
||||
if (searchList == null)
|
||||
searchList = new ArrayList<String>(4);
|
||||
searchList.add(term.toLowerCase(Locale.US));
|
||||
searchList.add(Normalizer.normalize(term.toLowerCase(Locale.US), Normalizer.Form.NFKD));
|
||||
}
|
||||
}
|
||||
if (searchList == null)
|
||||
return null;
|
||||
List<Snark> matches = new ArrayList<Snark>(32);
|
||||
for (Snark snark : snarks) {
|
||||
String lcname = snark.getBaseName().toLowerCase(Locale.US);
|
||||
String lcname = Normalizer.normalize(snark.getBaseName().toLowerCase(Locale.US), Normalizer.Form.NFKD);
|
||||
// search for any term (OR)
|
||||
for (int j = 0; j < searchList.size(); j++) {
|
||||
String term = searchList.get(j);
|
||||
|
||||
@@ -62,6 +62,7 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.Collator;
|
||||
import java.text.Normalizer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
@@ -3851,7 +3852,7 @@ public class WebMail extends HttpServlet
|
||||
terms = DataHelper.split(search, " ");
|
||||
// decode
|
||||
for (int i = 0; i < terms.length; i++) {
|
||||
terms[i] = terms[i].toLowerCase(Locale.US);
|
||||
terms[i] = Normalizer.normalize(terms[i].toLowerCase(Locale.US), Normalizer.Form.NFKD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3863,10 +3864,10 @@ public class WebMail extends HttpServlet
|
||||
Mail mail = mc.getMail(uidl, MailCache.FetchMode.HEADER_CACHE_ONLY);
|
||||
if (mail == null)
|
||||
return false;
|
||||
String subj = mail.subject.toLowerCase(Locale.US);
|
||||
String subj = Normalizer.normalize(mail.subject.toLowerCase(Locale.US), Normalizer.Form.NFKD);
|
||||
String sender = isDrafts ? null : mail.sender;
|
||||
if (sender != null)
|
||||
sender = sender.toLowerCase(Locale.US);
|
||||
sender = Normalizer.normalize(sender.toLowerCase(Locale.US), Normalizer.Form.NFKD);
|
||||
String[] to = isDrafts ? mail.to : null;
|
||||
for (String term : terms) {
|
||||
if (subj.contains(term))
|
||||
@@ -3875,7 +3876,7 @@ public class WebMail extends HttpServlet
|
||||
return true;
|
||||
if (to != null) {
|
||||
for (int i = 0; i < to.length; i++) {
|
||||
if (to[i].toLowerCase(Locale.US).contains(term))
|
||||
if (Normalizer.normalize(to[i].toLowerCase(Locale.US), Normalizer.Form.NFKD).contains(term))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user