【问题标题】:full text search android全文搜索安卓
【发布时间】:2012-09-04 08:38:07
【问题描述】:

我的全文搜索有问题。当我搜索时,它只是搜索第一个单词 例如我有“项目测试”我可以通过搜索项目找到它但是当我尝试搜索“测试”时我找不到它请告诉我该怎么做我给你我的代码

public static Cursor fetchProjectCursor(String name)
        throws IllegalAccessException, InstantiationException {

    Cursor cursor = DataBaseUtil.dataBaseAccess().query(
            _PROJECT_TABLE,
            _FIELD_NAME,
         "(" + _NAME + ")" + " LIKE " +  "(" + "\""
                + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);

    return cursor;
}

请帮帮我

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    只需要在 name 前加上 "%"

    Cursor cursor = DataBaseUtil.dataBaseAccess().query(
                _PROJECT_TABLE,
                _FIELD_NAME,
             "(" + _NAME + ")" + " LIKE " +  "(" + "\"" + "%"
                    + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);
    

    或者

    试试这个。

    return db.rawQuery("select * from your_table_name where column_name like ?", new String[] {"%"+name+"%"});
    

    它返回光标。

    【讨论】:

    • 我喜欢这个 return DataBaseUtil.dataBaseAccess().rawQuery("select * from _PROJECT_TABLE where _NAME like ?", new String[] {"%"+name+"%"}); }
    • 但不工作 logcat 告诉我没有这样的表:_PROJECT_TABLE 我的表就像公共静态最终字符串 _CREATE_PROJECT_TABLE = "CREATE TABLE IF NOT EXISTS" + _PROJECT_TABLE + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + _PROJECT_ID + " LONG NOT NULL," + _GROUP_ID + " LONG NULL," + _COMPANY_ID + " LONG NULL," + _USER_ID + " LONG NULL," + _USER_UUID + " LONG NULL," + _CREATE_DATE + " VARCHAR (50) NULL,"+ _MODIFIED_DATE +" VARCHAR(50) NULL,"
    • 您需要使用 _PROJECT_TABLE 值而不是 your_table_name 和 _NAME 值而不是 column_name 。
    • 我是网站新手,不知道怎么用,抱歉
    【解决方案2】:

    尝试在名称参数前添加一个“%”,如下所示:

    public static Cursor fetchProjectCursor(String name)
            throws IllegalAccessException, InstantiationException {
    
        Cursor cursor = DataBaseUtil.dataBaseAccess().query(
                _PROJECT_TABLE,
                _FIELD_NAME,
             "(" + _NAME + ")" + " LIKE " +  "(" + "\"" + "%"
                    + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);
    
        return cursor;
    }
    

    【讨论】:

      【解决方案3】:

      查看 SQLite 中的全文支持。

      CREATE VIRTUAL TABLE mytable USING fts3 (text TEXT);
      SELECT * FROM mytable WHERE text MATCH "text to match";
      

      在 fts3 虚拟表中,所有表都在 TEXT 中,即使您声明了 INTEGER。因此,您可能会发现将表拆分为两个表很有帮助。它需要一点点工作,但可以在数据库层上进行拆分。但结果会更好。通过更多的行和更大的行,您可以看到速度有很大的提升。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        相关资源
        最近更新 更多