Лично я не считаю хорошей идеей обходить все записи БД в коде и многократно выполнять множество операций (например, toLowerCase).
Лучшим решением было бы создать в вашей базе данных SQL еще одну таблицу с двумя столбцами, одним для ключей, а другим для строк.
Теперь давайте предположим, что у нас есть таблица лиц , поэтому мы создаем другую таблицу * fts_persons *. Каждый раз, когда новый человек добавляется в таблицу персон , новая запись также добавляется в таблицу * fts_persons *. Ключ в * fts_persons * будет таким же, как и в таблице Person , а второй столбец будет содержать все данные, доступные для поиска человека, разделенные символом-разделителем.
Пример:
таблица персон:
1234 | Джо | Саттер | Кингстон Роуд | 23 | работник
таблица fts_persons:
1234 | Джо + Саттер + Кингстон-роуд + 23 + рабочий
Теперь, когда вы выполняете полнотекстовый поиск, вы просто делаете запрос MATCH
для ключей в строковом столбце * fts_persons *. Если есть совпадения, вы получите список ключей, для которых вы можете выполнить другой запрос в таблице persons . Или вы можете объединить эти два запроса в один, что сделает все еще быстрее.
Конечно, вы должны синхронизировать таблицы fts с таблицами, для которых они созданы, поэтому каждый раз, когда таблица person обновляется или удаляется, вы должны обновить или удалить соответствующий столбец в * таблица fts_persons * также. Для этого лучше всего использовать триггеры в базе данных SQL