Android上的SQLite是否为FTS启用了ICU标记器?

Android上的SQLite是否为FTS启用了ICU标记器?,android,sqlite,locale,tokenize,full-text-search,Android,Sqlite,Locale,Tokenize,Full Text Search,正如标题所说:我们可以使用…使用fts3(标记器icu th,…)。如果可以,是否有人知道支持哪些区域设置,以及它是否因平台版本而异?否,只有tokenizer=porter 当我指定tokenizer=icu时,我得到“android.database.sqlite.SQLiteException:unknown tokenizer:icu” 此外,此链接还提示,如果Android在默认情况下没有编译它,它将不会被编译 可获得的 我在下面的链接中有一些使用标记化的Android代码,可能会有所

正如标题所说:我们可以使用
…使用fts3(标记器icu th,…)
。如果可以,是否有人知道支持哪些区域设置,以及它是否因平台版本而异?

否,只有tokenizer=porter

当我指定tokenizer=icu时,我得到“android.database.sqlite.SQLiteException:unknown tokenizer:icu”

此外,此链接还提示,如果Android在默认情况下没有编译它,它将不会被编译 可获得的

我在下面的链接中有一些使用标记化的Android代码,可能会有所帮助:


对于API级别21或更高级别,我测试并发现ICU标记器已经可用。

但是,为了支持90%以上的设备,可以进行一些变通。我有一个变通的想法,这也在我的另一个问题中提到:

您可以将ICU标记器函数作为单独的模块移植到java或本机Android模块中,但不直接涉及SQLite。然后使用“外部内容表”链接到虚拟表(FTS4支持)

添加元组时,将普通内容添加到外部内容表中,但在添加到虚拟索引表中之前,调用独立标记器向单词边界添加人工空格

在执行tuple delete时,再次调用tokenzier以使用人工空格更新内容表,然后删除虚拟表tuple,然后删除内容表tuple

这有点棘手,但与重新编译完整SQLite的另一个选项相比,它已经省力多了

有关外部内容表及其工作原理,请参阅

可用的ICU标记器实际上存在于Android SDK中。使用BreakIterator.getWordInstance。看起来它甚至支持基于字典的标记器,用于诸如中文之类的语言。

谢谢。这证实了我的怀疑。太糟糕了(我在两年多前报道过这个问题,但谷歌一直优先考虑触摸波、关机动画、不安全解锁方法(面部解锁)等实时壁纸,而不是像这样的问题。@gregm,链接已经失效。Eduardo发布的链接表明,安卓21(棒棒糖)中有ICU。