用多个关键字搜索android

时间:2013-02-28 17:17:47

标签: android search tags

我的应用程序包含搜索功能,它将搜索数据库中的内容。我的搜索的弱点是,我可以使用一个标签进行搜索,例如我只能搜索“cat”,它将返回我的数据库中包含单词'cat'的内容,因为我正在使用LIKE select语句中的查询。如何使用许多标签进行搜索?例如“带黄色球的猫”。这样,它将返回与插入的字符串相关的结果,如果数据库中不存在某些标记,它将忽略。为了更清楚,我在我的数据库中创建了一个示例表AboutCat。它包含3列,即id,c_question和c_keyword。

id = 1

c_question =如果我们拉猫的小胡子会怎么样?

c_keyword = cat mustache pull

如果我使用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() + "%';";

1 个答案:

答案 0 :(得分:2)

您需要将字符串拆分为单独的单词,然后动态构建WHERE子句以匹配每个单词。像这样:

String sql = 
"select * from " 
+ OpenHelper.DB_TABLE_WANITA 
+ " where " 
+ OpenHelper.KEY_WANITA + " like " + "'%cat%'" 
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%mustache%'"
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%pull%'"
+";"
;