Allow searching for words with apostrophes.

Previously, because apostrophes were 'banned' characters, searching for
them wouldn't work. That meant you couldn't find words like "I'm". Now
we just replace the apostrophe with a space and things "just work"
because of the nature of SQLite tokenization and prefix queries.
This commit is contained in:
Greyson Parrelli 2018-06-15 12:18:39 -07:00
parent afec9e8cb0
commit 5f99470226

View File

@ -119,6 +119,9 @@ class SearchRepository {
/** /**
* Unfortunately {@link DatabaseUtils#sqlEscapeString(String)} is not sufficient for our purposes. * Unfortunately {@link DatabaseUtils#sqlEscapeString(String)} is not sufficient for our purposes.
* MATCH queries have a separate format of their own that disallow most "special" characters. * MATCH queries have a separate format of their own that disallow most "special" characters.
*
* Also, SQLite can't search for apostrophes, meaning we can't normally find words like "I'm".
* However, if we replace the apostrophe with a space, then the query will find the match.
*/ */
private String sanitizeQuery(@NonNull String query) { private String sanitizeQuery(@NonNull String query) {
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
@ -127,6 +130,8 @@ class SearchRepository {
char c = query.charAt(i); char c = query.charAt(i);
if (!BANNED_CHARACTERS.contains(c)) { if (!BANNED_CHARACTERS.contains(c)) {
out.append(c); out.append(c);
} else if (c == '\'') {
out.append(' ');
} }
} }