全文搜索android

时间:2012-09-04 08:38:07

标签: android database sqlite

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

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 个答案:

答案 0 :(得分:0)

只需在名称前添加“%”即可。

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

它返回Cursor。

答案 1 :(得分:0)

尝试在name参数之前添加'%',如下所示:

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

答案 2 :(得分:0)

在SQLite中查看构建全文支持。

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

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