我正在尝试在Android上创建字典应用程序。我有一个80000篇文章的数据库。当用户在EditText
中输入单词时,我想在ListView中显示建议,为此,我使用以下代码:
public Cursor query(String entry){
String[] columns = new String[]{"_id", "word"};
String[] selectionArgs = new String[]{entry + "%"};
return mDB.query("word", columns, "word LIKE ?", selectionArgs, null, null, null);
}
我使用SimpleCursorAdapter作为ListView。
问题是建议出现得很晚。我认为SQL中的原因是LIKE
。我不知道有任何其他方法可以做到这一点。我能做些什么来提高获得建议的表现吗?
答案 0 :(得分:4)
您可能会发现在word
列上添加索引会有很大帮助。请参阅the documentation。
所以你可以在创建表之后尝试这个:
CREATE INDEX word_idx ON word (word);
(注意:我不确定是否有名为word
的表和列会导致语法问题。试试看看!)
答案 1 :(得分:1)
作为一种简单的替代方法,您可以使用Limit
按照任意顺序限制建议,如以下帖子所示:Using the LIMIT statement in a SQLite query
mDB.query("word", columns, "word LIKE ?", selectionArgs, null, null, null, "LIMIT 150" );
由于所有结果都是同等有效的建议,因此订单无关紧要。
此外,您还无法显示大量的建议,因此您可以根据您的用户界面使用一些固定的限制数量。我以 150 为例。
希望有所帮助......
答案 2 :(得分:1)
除了显而易见的索引之外,如果这是一个字典,您应该使用MATCH
而不是like
来使用全文搜索。 Android应该支持FTS3。
在此处查看http://www.sqlite.org/fts3.html以及有关Android上的fts3的一些答案。
似乎单词应该以字符串开头。 也许这种技巧可能会有所帮助:SQLite FTS3 simulate LIKE somestring%