问题描述
我使用的SQLite数据库FTS3,与我的Android应用程序。
I am using sqlite FTS3 database, with my Android application.
public Cursor getWordMatches(String query, String[] columns) {
String selection = KEY_WORD + " MATCH ?";
String[] selectionArgs = new String[] {query+"*"};
return query(selection, selectionArgs, columns);
}
......
.....
private Cursor query(String selection, String[] selectionArgs, String[] columns) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(FTS_VIRTUAL_TABLE);
builder.setProjectionMap(mColumnMap);
Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
columns, selection, selectionArgs, null, null, null);
if (cursor == null) {
return null;
} else if (!cursor.moveToFirst()) {
cursor.close();
return null;
}
return cursor;
}
如果我做一个查询和搜索'家',我会得到:
If I make a query and search for 'house' I will get:
household
house
apartment house
big house
(我得到的一切,有房子在里面,在正则表达式的房子的)
我怎样才能得到这种结果对于我的查询?
How can I get this kind of result for my query?
household
house
(所以我只想要结果入手的房子,在房子的正则表达式*)
(So i only want results that start with house, in regex house*)
我的Android应用程序FORCE关闭如我使用LIKE语句(也许是因为数据库有20万行)。所以,我应该以某种方式结合MATCH和LIKE语句?它甚至有可能做到这一点在Android上,如果不是,也许我应该尝试在光标运行一些正则表达式后,我从该查询得到它?
My android application FORCE CLOSES if I use LIKE statement(maybe because db has 200000 rows).So should I somehow combine MATCH and LIKE statement?Is it even possible to do this on Android, if it is not maybe I should try to run some regex on cursor after I get it from this query?
推荐答案
全文检索表应该总是使用火柴不喜欢,因为LIKE查询执行表的完全扫描这违背在创建FTS表的目的位居第一。
Full text search tables should always use MATCH and not LIKE, because a LIKE query performs a full scan of the table which defeats the purpose of creating the FTS table in the first place.
要解决问题,创建FTS表时使用的标记生成非默认尝试:
To solve your problem, trying using a tokenizer other than the default when creating your fts table:
-- Create a table using the simple tokenizer.
CREATE VIRTUAL TABLE simple USING fts3(tokenize=porter);
在默认情况下,SQLite的使用一个简单的标记生成器可产生你不想要的比赛。切换到门房标记生成器,看看会发生什么。最糟糕的情况下,可以实现自定义的标记生成器。参见更多信息的 SQLite的文档。
这篇关于在Android上使用SQLite(与FTS)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!