我在全文搜索时遇到问题。当我搜索时,它只是搜索第一个单词例如,我有"项目测试",我可以通过搜索项目找到它,但当我尝试搜索"测试"时,我找不到它,请告诉我如何做,我给你我的代码
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;
}
请帮助我
只需在名称前添加"%"即可。
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。
尝试在名称参数前添加一个"%",如下所示:
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;
}
查看SQLite中的内置全文支持。
CREATE VIRTUAL TABLE mytable USING fts3 (text TEXT);
SELECT * FROM mytable WHERE text MATCH "text to match";
在fts3虚拟表中,即使您声明了INTEGER,所有表都是TEXT格式的。所以,您可能会发现将表拆分为两个表很有帮助。它需要一些工作,但可以在数据层上进行拆分。但结果会更好。有了更多的行和更大的行,你可以看到速度的大幅提高。