Lucene vs SQLite全文搜索适用于Android应用程序。

3 浏览
0 Comments

Lucene vs SQLite全文搜索适用于Android应用程序。

我的英语水平不好,请尽量理解我的意思。谢谢!\n我想创建一个安卓词典应用,但我对此没有经验。我做了一些调查,有两种选择来创建数据库:Lucene和SQLite全文搜索。所以我按照一些教程制作了一个应用。我发现FTS使用虚拟表来存储数据库,但问题是当第一次向虚拟表中添加数据时(大约10000行的文本文件),应用会冻结。搜索功能也需要很长时间(大约10秒)。\n然后,我找到了一些关于Lucene的其他教程。Lucene创建了一个索引目录用于搜索,但我不知道它在处理大量数据时有多快。有人可以给我一些建议吗?

0
0 Comments

在Android应用中,我建议您使用SQLite的全文搜索功能(fts4)。

出现这个问题的原因有以下三个强有力的理由:

1. SQLite是Android操作系统的特性。它在Android中得到了很好的支持,并且有很多人在使用它。

2. SQLite具有很好的可扩展性,不仅支持全文搜索功能,还支持其他功能。

3. 如果您认为索引构建时间太长,您可以在构建APK之前先构建索引,然后将其放入assets中。10000行文字大小的数据库从assets复制到/data/data目录也不会超过500毫秒。

根据以上原因,我们可以得出结论:在Android应用中,使用SQLite的全文搜索功能是一个解决方法。

0
0 Comments

问题的出现原因是在使用SQLite的虚拟表进行全文搜索时,存储空间几乎会增加一倍,并且在第一次向虚拟表中添加数据时,应用程序会出现卡顿现象。此外,进行搜索操作也需要较长的时间。

解决方法是事先创建一个虚拟表,并将SQLite数据库添加到assets文件夹中。这样可以避免在运行时添加数据到虚拟表时的卡顿问题,并且可以加快搜索操作的速度。

以下是使用SQLite虚拟表进行全文搜索的示例代码:

// 创建虚拟表
String createVirtualTableQuery = "CREATE VIRTUAL TABLE IF NOT EXISTS my_table USING FTS4(column1, column2);";
database.execSQL(createVirtualTableQuery);
// 将SQLite数据库添加到assets文件夹中
String databaseName = "my_database.db";
String databasePath = context.getFilesDir().getPath() + "/" + databaseName;
FileUtils.copyDatabaseFromAssets(context, databaseName, databasePath);
// 打开数据库
SQLiteDatabase database = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READONLY);
// 执行全文搜索
String searchQuery = "SELECT * FROM my_table WHERE column1 MATCH 'search_keyword';";
Cursor cursor = database.rawQuery(searchQuery, null);

通过事先创建虚拟表和将数据库添加到assets文件夹中,可以优化Lucene在Android应用程序中的全文搜索功能。这样可以提高搜索的性能并减少卡顿现象的发生。

0