私のアプリケーションには検索機能が含まれており、データベース内のコンテンツを検索します。LIKE
検索の弱点は、1つのタグのみを使用して検索できることです。たとえば、「cat」のみを検索でき、selectステートメントでクエリを使用しているため、データベースに「cat」という単語を含むコンテンツが返されます。多くのタグを使用して検索するにはどうすればよいですか?たとえば、「黄色いボールを持った猫」。そのため、挿入された文字列に関連する結果が返され、一部のタグがデータベースに存在しない場合は無視されます。より明確にするためAboutCat
に、データベースにサンプルテーブルを作成しました。id、c_question、c_keywordの3つの列が含まれています。
id = 1
c_question =猫の口ひげを引っ張るとどうなりますか?
c_keyword=猫の口ひげプル
c_keyword
「cat」、「cat mustache」、「mustache pull」など、列のキーワードのいずれかを使用して検索すると、が表示されますc_question
。しかし、「猫の引っ張り」や「口ひげの猫」を検索しても表示されません。それで、それが一致し、c_keyword列内に存在する限り、単語の順序を無視して検索するにはどうすればよいですか?以下は私のコードです...私の説明が明確でないかどうか私に尋ねてください。
btnWanita.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
results.clear();
if(txtWnta.getText().toString().matches(""))
{
Toast.makeText(WanitaActivity.this, "Sila masukkan kata kunci", Toast.LENGTH_SHORT).show();
}
else
{
OpenHelper helper = new OpenHelper(getApplicationContext());
database = helper.getWritableDatabase();
try{
String sql = "select * from " +
OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
" like " + "'%" + txtWnta.getText().toString() + "%';";
Cursor c = database.rawQuery(sql, null);
if(c!= null)
{
c.moveToFirst();
int soalanColumn = c.getColumnIndex(OpenHelper.MASALAH_WANITA);
int getId = c.getColumnIndex(OpenHelper.ID_WANITA);
if(c.isFirst())
{
do
{
idList.add(c.getLong(getId));
results.add(c.getString(soalanColumn));
}while(c.moveToNext());
}
adapter.updateList(results);
}
}
catch(SQLException e)
{
Log.v("caer ", e.toString());
}
}
私の検索はここに行きます...
String sql = "select * from " +
OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
" like " + "'%" + txtWnta.getText().toString() + "%';";