Merge "FR #16136331 Search - results should be ordered with match on Title and then on SubTitle"
This commit is contained in:
committed by
Android (Google) Code Review
commit
2a2b22a019
@@ -28,6 +28,7 @@ import android.content.res.TypedArray;
|
|||||||
import android.content.res.XmlResourceParser;
|
import android.content.res.XmlResourceParser;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.DatabaseUtils;
|
import android.database.DatabaseUtils;
|
||||||
|
import android.database.MergeCursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
@@ -123,9 +124,12 @@ public class Index {
|
|||||||
IndexColumns.DATA_KEY_REF // 13
|
IndexColumns.DATA_KEY_REF // 13
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] MATCH_COLUMNS = {
|
private static final String[] MATCH_COLUMNS_PRIMARY = {
|
||||||
IndexColumns.DATA_TITLE,
|
IndexColumns.DATA_TITLE,
|
||||||
IndexColumns.DATA_TITLE_NORMALIZED,
|
IndexColumns.DATA_TITLE_NORMALIZED
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] MATCH_COLUMNS_SECONDARY = {
|
||||||
IndexColumns.DATA_SUMMARY_ON,
|
IndexColumns.DATA_SUMMARY_ON,
|
||||||
IndexColumns.DATA_SUMMARY_ON_NORMALIZED,
|
IndexColumns.DATA_SUMMARY_ON_NORMALIZED,
|
||||||
IndexColumns.DATA_SUMMARY_OFF,
|
IndexColumns.DATA_SUMMARY_OFF,
|
||||||
@@ -214,9 +218,24 @@ public class Index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Cursor search(String query) {
|
public Cursor search(String query) {
|
||||||
final String sql = buildSearchSQL(query);
|
final SQLiteDatabase database = getReadableDatabase();
|
||||||
Log.d(LOG_TAG, "Search query: " + sql);
|
final Cursor[] cursors = new Cursor[2];
|
||||||
return getReadableDatabase().rawQuery(sql, null);
|
|
||||||
|
final String primarySql = buildSearchSQL(query, MATCH_COLUMNS_PRIMARY, true);
|
||||||
|
Log.d(LOG_TAG, "Search primary query: " + primarySql);
|
||||||
|
cursors[0] = database.rawQuery(primarySql, null);
|
||||||
|
|
||||||
|
// We need to use an EXCEPT operator as negate MATCH queries do not work.
|
||||||
|
StringBuilder sql = new StringBuilder(
|
||||||
|
buildSearchSQL(query, MATCH_COLUMNS_SECONDARY, false));
|
||||||
|
sql.append(" EXCEPT ");
|
||||||
|
sql.append(primarySql);
|
||||||
|
|
||||||
|
final String secondarySql = sql.toString();
|
||||||
|
Log.d(LOG_TAG, "Search secondary query: " + secondarySql);
|
||||||
|
cursors[1] = database.rawQuery(secondarySql, null);
|
||||||
|
|
||||||
|
return new MergeCursor(cursors);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cursor getSuggestions(String query) {
|
public Cursor getSuggestions(String query) {
|
||||||
@@ -422,7 +441,7 @@ public class Index {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean updateFromRemoteProvider(String packageName, String authority) {
|
private boolean updateFromRemoteProvider(String packageName, String authority) {
|
||||||
if (!addIndexablesFromRemoteProvider(packageName, authority)) {
|
if (!addIndexablesFromRemoteProvider(packageName, authority)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -615,11 +634,13 @@ public class Index {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildSearchSQL(String query) {
|
private String buildSearchSQL(String query, String[] colums, boolean withOrderBy) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(buildSearchSQLForColumn(query, MATCH_COLUMNS));
|
sb.append(buildSearchSQLForColumn(query, colums));
|
||||||
sb.append(" ORDER BY ");
|
if (withOrderBy) {
|
||||||
sb.append(IndexColumns.DATA_RANK);
|
sb.append(" ORDER BY ");
|
||||||
|
sb.append(IndexColumns.DATA_RANK);
|
||||||
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1215,7 +1236,7 @@ public class Index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A basic AsynTask for saving a Search query into the database
|
* A basic AsyncTask for saving a Search query into the database
|
||||||
*/
|
*/
|
||||||
private class SaveSearchQueryTask extends AsyncTask<String, Void, Long> {
|
private class SaveSearchQueryTask extends AsyncTask<String, Void, Long> {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user