tgoop.com/android_live/551
Last Update:
SQLite FTS в Room
#room
Одной из самых нераспространённых, но полезных фич Room является FTS поиск.
FTS или full-text search — это функция, которая позволяет делать поиск по тексту при помощи созданной виртуальной таблицы.
Самым простым решением является использования оператора LIKE
. Но есть проблема — это скорость при выполнении запроса. По сути, этот оператор проходит по всей таблице и находит те данные, что соответствуют запросу.
Виртуальные таблицы позволяют значительно увеличить скорость выполнения подобных запросов. Если в приложении много SQL-запросов с LIKE
, то стоит присмотреться к этому решению.
Всё что нужно — это использовать аннотацию @Fts4
с указанием родительской таблицы:@Fts4(contentEntity = Route::class)
@Entity(tableName = "routesFts")
class RoutesFts(val id: String, val title: String)
А также немного изменить написанных запрос, убрав из него LIKE
: @Dao
abstract class RouteFtsDao {
@Query("SELECT * FROM route JOIN routesFts ON route.id == routesFts.id WHERE routesFts.title MATCH :text GROUP BY route.id" )
abstract fun routesWithText(text: String): List<Route>
}
Немного подробнее можно почитать в двух статьях: тут и тут.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/551