迁移到房间:如何进行全文搜索?

时间:2017-11-29 08:29:35

标签: android sqlite full-text-search android-room

我正在寻找如何从普通的Sqlite迁移现有应用程序到Room,而我无法找到如何迁移使用FTS的部件。

现在,每次插入或更新一行时,我都有一个虚拟表,它被一个触发器填充:

private static final String CREATE_VIRTUAL_TABLE = "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE +
            " using fts4 (content='" + TABLE_NOTIFICATION + "', " + COLUMN_TITLE + ")";

private static void createVirtualTriggers(SQLiteDatabase database){
      database.execSQL("CREATE TRIGGER virtual_bu BEFORE UPDATE ON " + TABLE_NOTIFICATION + " BEGIN\n" +  "  DELETE FROM " + FTS_VIRTUAL_TABLE + " WHERE docid=old.rowid;\n" +    "END;");
      database.execSQL("CREATE TRIGGER virtual_bd BEFORE DELETE ON " + TABLE_NOTIFICATION + " BEGIN\n" +  "  DELETE FROM " + FTS_VIRTUAL_TABLE + " WHERE docid=old.rowid;\n" +    "END;");
      database.execSQL("CREATE TRIGGER virtual_au AFTER UPDATE ON " + TABLE_NOTIFICATION + " BEGIN\n" +  "  INSERT INTO " + FTS_VIRTUAL_TABLE + "(docid, " + COLUMN_TITLE + ") VALUES(new.rowid, new." + COLUMN_TITLE +");\n" + "END;");
      database.execSQL("CREATE TRIGGER virtual_ai AFTER INSERT ON " + TABLE_NOTIFICATION + " BEGIN\n" +  "  INSERT INTO " + FTS_VIRTUAL_TABLE + "(docid, " + COLUMN_TITLE + ") VALUES(new.rowid, new." + COLUMN_TITLE +");\n" +                   "END;");
  }

有没有办法在Room中实现同样的功能?

2 个答案:

答案 0 :(得分:5)

不是真的。请参阅跟踪此请求的this issuethis issue

您可以随时使用数据库直接处理FTS方案,例如在问题的代码段中创建表格和触发器,calling getOpenHelper() on the RoomDatabase并使用类似于SQLiteOpenHelper的方式。房间将忽略您在其背后创建的新表和内容。因此,如果您的FTS工作恰好与其他数据库工作完全分开,那么您可能会走这条路。

答案 1 :(得分:2)

此功能将在2.1.0会议室提供

按照https://issuetracker.google.com/issues/62356416