SQLite字典数据库优化

时间:2011-12-23 21:32:08

标签: android sqlite dictionary

我正在写一本字典应用程序。我有一个大的静态SQLite数据库,其中包含一个表(100k +行)和一个»_id«,»word«和»description«列。条目按字典顺序排列为“word”。我使用下面的代码和afterTextChanged(可编辑的searchText)在数据库中进行即时搜索,将选择的行加载到ArrayList中,然后从那里加载到列表适配器。 但是,代码有效,它不是很有效,即:

  • 搜索以“z”开头的单词比以“a”开头的单词要快得多。
  • 输入»abc«后,当用户输入»d«时,搜索»abcd«从开始而不是从第一次出现»abc«开始。
  • 对不存在的字符串的查询持续很长时间,但我们知道,“abcdx”只能出现在»abcd«和»abce«之间。

我是否有办法优化这些属性?是否有现成的词典解决方案?对不起,我是新来的。

我可以用»> =«替换»LIKE«,因为单词也包含一些非ASCII字符,而»> =«查询不适用于它们。

//---retrieves a database subset in the range (MATCH-RowsBefore, MATCH+RowsAfter)---
public Cursor getSearch(Editable typedKeys) throws SQLException 
{
    Cursor sCursor =
            db.rawQuery("SELECT _id, word FROM dict WHERE word LIKE ? LIMIT 1", 
            new String[]{typedKeys + "%"});
    if (sCursor.moveToFirst()) {
        SearchedRow = Integer.parseInt(sCursor.getString(0));
        int newstart = SearchedRow - RowsBefore;
        String curlen = Integer.toString(RowsBefore + RowsAfter + 1);
        sCursor = db.query(true, DB_TABLE, new String[] {_id,
                word}, _id + ">=" + newstart, null, null, null, null, curlen);
    }
    return sCursor;
}

0 个答案:

没有答案