Я пытался использовать новую функцию Room 2.1 в таблице FTS Android для включения функции поиска.
Объект:
@Entity
class ChatMessageEntity(
@PrimaryKey
var messageId: String,
var messageUser: String,
var messageText: String,
)
Объект FTS:
@Fts4(contentEntity = ChatMessageEntity::class)
@Entity
class ChatMessageFts(
var messageText: String //only want messageText searchable
)
База данных:
@Database(entities = [ChatMessageEntity::class, ChatMessageFts::class], version = 1)
abstract class ChatMessageDatabase : RoomDatabase() {
abstract fun chatMessageDatabase(): ChatMessageDao
companion object {
fun create(context: Context) = Room.databaseBuilder(context, ChatMessageDatabase::class.java, DB_NAME).build()
}
}
DAO:
@Query("INSERT INTO ChatMessageFts(ChatMessageFts) VALUES('rebuild')") //works
suspend fun ftsRebuild()
@Query("INSERT INTO ChatMessageFts(docid, messageText) VALUES(:id, :text)") //compiles but doesn't work
suspend fun saveFtsMessage(id: Long, text: String)
Я хочу sh добавить каждую строку в FTS, когда я также добавлю строку в исходную таблицу (ChatMessageEntity - нет показано). При восстановлении таблицы FTS с нуля она отлично работает (ftsRebuild()
выше).
Тем не менее, я sh добавлю каждый вход отдельно. Я перепробовал много вещей (например, saveFtsMessage()
, показанный выше) - добавление без docId, попытка с rowId, ... Я даже пытался добавить новый объект ChatMessageEntity
в ChatMessageFts
в качестве ввода, но мне не удалось скомпилировать это из-за ошибок.
Любое предложение о том, как я могу добавить индивидуальный ввод в таблицу FTS, приветствуется!