包含多个关键字搜索机器人 [英] android searching with multiple keywords

查看:122
本文介绍了包含多个关键字搜索机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序包含搜索功能​​,它会搜索数据库中的内容。我搜索的缺点是,我可以使搜索使用一个标签只可用于例如我只可以搜索猫和因为我使用 LIKE 查询。我怎样才能让使用多个标签搜索?例如,猫黄球。因此,它会返回与插入的字符串结果,如果一些变量不在数据库中它会忽略。为了更清楚,我在我的数据库中创建了一个示例表 AboutCat 。它包含3列是的id,c_question和c_keyword。

ID = 1

c_question =发生什么,如果我们拽猫的胡子?

c_keyword =猫胡子拉

如果我使用任何关键字的 c_keyword 列如猫和猫胡须或胡子拉式搜索,它会显示 c_question 。但是,如果我搜索猫拉或小胡子猫,它不会显示。那么,怎样才能用我只要是比赛和c_keyword列中存在忽视单词的顺序来搜索它?下面是我的code ...问我,如果我解释不清楚。

  btnWanita.setOnClickListener(新OnClickListener(){        @覆盖
        公共无效的onClick(视图v){            results.clear();            如果(txtWnta.getText()。的toString()。匹配())
            {
                Toast.makeText(WanitaActivity.this,西拉masukkan卡塔kunci,Toast.LENGTH_SHORT).show();            }            其他
            {
            OpenHelper帮手=新OpenHelper(getApplicationContext());
            数据库= helper.getWritableDatabase();            尝试{                SQL字符串=选择*+
                            OpenHelper.DB_TABLE_WANITA +,其中+ OpenHelper.KEY_WANITA +
                            像+%+ txtWnta.getText()的toString()+%;
                光标C = database.rawQuery(SQL,NULL);                如果(C!= NULL)
                {
                    c.moveToFirst();
                    INT soalanColumn = c.getColumnIndex(OpenHelper.MAS​​ALAH_WANITA);
                    INT的getId = c.getColumnIndex(OpenHelper.ID_WANITA);
                    如果(c.isFirst())
                    {
                        做
                        {
                            idList.add(c.getLong(的getId));
                            results.add(c.getString(soalanColumn));
                        }而(c.moveToNext());
                    }                    adapter.updateList(结果);
                }            }                赶上(的SQLException E)
                {
                    Log.v(CAER,e.toString());
                }
            }

我的搜索放在这里......

 字符串SQL =SELECT * FROM+
                            OpenHelper.DB_TABLE_WANITA +,其中+ OpenHelper.KEY_WANITA +
                            像+%+ txtWnta.getText()的toString()+%;


解决方案

您需要将您的字符串分割成单独的单词,然后动态地构建WHERE每个字匹配的条款。事情是这样的:

 字符串SQL =
从选择*
+ OpenHelper.DB_TABLE_WANITA
+,其中
+ OpenHelper.KEY_WANITA +,如+%猫%'
+或
+ OpenHelper.KEY_WANITA +,如+%小胡子%'
+或
+ OpenHelper.KEY_WANITA +,如+%拉力%'
+;
;

My application contain search function and it will search content inside the database. The weakness of my searching is, I can make it search using one tag only for example I only can search "cat" and it will return content in my database that contain the word 'cat' because I'm using LIKE query during select statement. How can i make my search using many tags? for example "cat with yellow ball". So that, it will return result that related to the string inserted and it will ignore if some of tags are not exist in database. To make it more clear, I had created a sample table AboutCat in my database. It contains 3 column which is id, c_question and c_keyword.

id = 1

c_question = What happen if we pull the cat's mustache?

c_keyword = cat mustache pull

If i search by using any of the keywords in c_keyword column for example "cat" or "cat mustache" or "mustache pull", it will display c_question. But if I search "cat pull" or "mustache cat", it would not display. So, how can I search it by ignoring the order of words as long as it is match and exist inside the c_keyword column?. Below is my code...ask me if my explanation was not clear..

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());   
                }
            }

My searching goes here...

String sql = "select * from " +
                            OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
                            " like " + "'%" + txtWnta.getText().toString() + "%';";

解决方案

You need to split your string into separate words and then dynamically build WHERE clause for matching each word. Something like this:

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%'"
+";"
;

这篇关于包含多个关键字搜索机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆