Implement full text search

This commit is contained in:
Kirill Kamakin
2022-11-13 09:52:52 +01:00
parent 21abf38282
commit 79631a7eb0
12 changed files with 285 additions and 12 deletions

View File

@@ -6,12 +6,13 @@ import gq.kirmanak.mealient.database.recipe.RecipeDao
import gq.kirmanak.mealient.database.recipe.entity.*
@Database(
version = 6,
version = 7,
entities = [
RecipeSummaryEntity::class,
RecipeEntity::class,
RecipeIngredientEntity::class,
RecipeInstructionEntity::class
RecipeInstructionEntity::class,
RecipeSummaryFtsEntity::class,
],
exportSchema = true,
autoMigrations = [
@@ -19,6 +20,7 @@ import gq.kirmanak.mealient.database.recipe.entity.*
AutoMigration(from = 3, to = 4),
AutoMigration(from = 4, to = 5, spec = AppDb.From4To5Migration::class),
AutoMigration(from = 5, to = 6, spec = AppDb.From5To6Migration::class),
AutoMigration(from = 6, to = 7),
]
)
@TypeConverters(RoomTypeConverters::class)

View File

@@ -9,6 +9,9 @@ interface RecipeDao {
@Query("SELECT * FROM recipe_summaries ORDER BY date_added DESC")
fun queryRecipesByPages(): PagingSource<Int, RecipeSummaryEntity>
@Query("SELECT * FROM recipe_summaries JOIN recipe_summaries_fts ON recipe_summaries_fts.remote_id == recipe_summaries.remote_id WHERE recipe_summaries_fts.name MATCH :query ORDER BY date_added DESC")
fun queryRecipesByPages(query: String): PagingSource<Int, RecipeSummaryEntity>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertRecipe(recipeSummaryEntity: RecipeSummaryEntity)

View File

@@ -0,0 +1,13 @@
package gq.kirmanak.mealient.database.recipe.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.Fts4
@Entity(tableName = "recipe_summaries_fts")
@Fts4(contentEntity = RecipeSummaryEntity::class)
data class RecipeSummaryFtsEntity(
@ColumnInfo(name = "remote_id") val remoteId: String,
@ColumnInfo(name = "name") val name: String,
)