0

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

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

请帮我

4

3 回答 3

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;
}
于 2012-09-04T08:43:31.983 回答
0

查看 SQLite 中的内置全文支持。

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

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

于 2012-09-05T06:33:57.333 回答
0

只需要在 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+"%"});

它返回光标。

于 2012-09-04T08:42:35.860 回答