"optimize" android 上的 sqlite fts3 命令使 "MATCH" 不起作用
"optimize" command in sqlite fts3 on android makes "MATCH" doesn't work
我正在 android 中创建一个 fts4 table ,我批量插入大量行然后按照 sqlite documentation
中的建议进行优化
我在android
中使用了下面的代码
public void indexFts() {
SQLiteDatabase db = getWritableDatabase();
db.execSQL("CREATE VIRTUAL TABLE IF NOT EXISTS pageTextSearch USING fts4(content=\"\", page)");
db.beginTransaction();
try {
SQLiteStatement populateFTS_Statement = db.compileStatement(INSERT INTO pageTextSearch(docid,page)VALUES (?, ?)); //pre-compiled sql statement
while (allPagesCursor.moveToNext()) {
populateFTS_Statement.clearBindings();
populateFTS_Statement.bindLong(1, allPagesCursor.getLong(0));
populateFTS_Statement.bindString(2, allPagesCursor.getString(1));
populateFTS_Statement.executeInsert();
}
db.execsql( INSERT INTO pageTextSearch(pageTextSearch)VALUES('optimize'));
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
现在,当我用匹配查询 fts table 时,无论查询如何,我都会得到 0 个结果
例如:
db.rawQuery(SELECT docid FROM pageTextSearch WHERE page MATCH ?
, new String[]{"a"});
将给出一个空光标
经过大量尝试发现错误(事务、无内容的 fts table 和预编译 SQL)
问题实际上是使用 execsql,使用 rawQuery 解决了问题
我没有在 android execsql 文档中找到这种行为
看到这个 question for discussion about using execsql to insert
所以工作代码是
db.rawQuery( INSERT INTO pageTextSearch(pageTextSearch)VALUES('optimize'),null);
我正在 android 中创建一个 fts4 table ,我批量插入大量行然后按照 sqlite documentation
中的建议进行优化我在android
中使用了下面的代码public void indexFts() {
SQLiteDatabase db = getWritableDatabase();
db.execSQL("CREATE VIRTUAL TABLE IF NOT EXISTS pageTextSearch USING fts4(content=\"\", page)");
db.beginTransaction();
try {
SQLiteStatement populateFTS_Statement = db.compileStatement(INSERT INTO pageTextSearch(docid,page)VALUES (?, ?)); //pre-compiled sql statement
while (allPagesCursor.moveToNext()) {
populateFTS_Statement.clearBindings();
populateFTS_Statement.bindLong(1, allPagesCursor.getLong(0));
populateFTS_Statement.bindString(2, allPagesCursor.getString(1));
populateFTS_Statement.executeInsert();
}
db.execsql( INSERT INTO pageTextSearch(pageTextSearch)VALUES('optimize'));
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
现在,当我用匹配查询 fts table 时,无论查询如何,我都会得到 0 个结果 例如:
db.rawQuery(SELECT docid FROM pageTextSearch WHERE page MATCH ?
, new String[]{"a"});
将给出一个空光标
经过大量尝试发现错误(事务、无内容的 fts table 和预编译 SQL) 问题实际上是使用 execsql,使用 rawQuery 解决了问题 我没有在 android execsql 文档中找到这种行为 看到这个 question for discussion about using execsql to insert
所以工作代码是
db.rawQuery( INSERT INTO pageTextSearch(pageTextSearch)VALUES('optimize'),null);