FTS4 matchinfo 不适用于 android 房间数据库

Posted

技术标签:

【中文标题】FTS4 matchinfo 不适用于 android 房间数据库【英文标题】:FTS4 matchinfo not working with android room database 【发布时间】:2020-10-27 08:39:50 【问题描述】:

我在 FTS 虚拟表中有两列(namedescription),我想使用 matchinfo 函数在 FTS 中优先考虑 name 列,但在 android 中有空间我收到以下错误:

从表中检索数据时出错。:无法在请求的上下文中使用函数 matchinfo(代码 1 SQLITE_ERROR)

这是我的查询:

@Query("""select workout_cache.id, workout_cache.met, workout_cache.name, workout_cache.workoutDescription, matchinfo(workout_cache_fts, 'pcs') as mi
from workout_cache join workout_cache_fts on workout_cache.id = workout_cache_fts.id 
where workout_cache_fts match :text group by workout_cache.id""")
abstract suspend fun query(text: String): List<WorkoutCacheEntityWithMatchInfo>

我的WorkoutCacheEntityWithMatchInfo 班级

class WorkoutCacheEntityWithMatchInfo(
    @Embedded
    val workout: WorkoutCacheEntity,
    @ColumnInfo(name = "mi")
    val matchInfo: ByteArray
)

更新:当我不使用连接子句时它工作正常。

【问题讨论】:

【参考方案1】:

这很愚蠢。我刚刚删除了group by 子句,它起作用了。

这里更新道:

@Query("""select workout_cache.id, workout_cache.met, workout_cache.name, workout_cache.workoutDescription, matchinfo(workout_cache_fts, 'pcs') as mi
from workout_cache join workout_cache_fts on workout_cache.id = workout_cache_fts.id 
where workout_cache_fts match :text""")
abstract suspend fun query(text: String): List<WorkoutCacheEntityWithMatchInfo>

【讨论】:

以上是关于FTS4 matchinfo 不适用于 android 房间数据库的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 全文搜索相关性排名

谷歌地图不适用于 ionic cordova run android

copy List实体

copy List实体

没有这样的模块:fts4aux-查询使用 fts4aux 创建的 sqlite 虚拟表时出错

Android 中的 FTS4 查询错误