Для API уровня 21 или выше, я проверил и обнаружил, что токенизатор ICU уже доступен.
Однако для поддержки более 90% устройств можно обойтись. У меня есть идея обхода, которая также упоминается в моем другом вопросе: Обход Android полнотекстового поиска SQLite для азиатского текста
Вы можете портировать функцию токенайзера ICU в java или собственный модуль Android как отдельный модуль, но напрямую не участвующий в SQLite. Затем используйте «таблицу внешнего содержимого» для связи с виртуальной таблицей (поддерживается FTS4).
При добавлении кортежа добавьте нормальное содержимое во внешнюю таблицу содержимого, но вызовите автономный токензер, чтобы добавить искусственные пробелы к границе слов перед добавлением в таблицу виртуального индекса.
При удалении кортежа снова вызовите tokenzier, чтобы обновить таблицу содержимого искусственными пробелами, затем удалите кортеж виртуальной таблицы, затем удалите кортеж таблицы контента.
Это немного сложно, но, сравнивая другой вариант повторной компиляции полного SQLite, это уже намного меньше усилий.
Таблицу внешнего контента и как она работает, пожалуйста, смотрите https://www.sqlite.org/fts3.html#section_6_2_2
Доступный токенайзер ICU фактически есть в Android SDK. Используйте BreakIterator.getWordInstance. Похоже, он даже поддерживает токенайзер на основе словаря для таких языков, как китайский.
http://developer.android.com/reference/java/text/BreakIterator.html