Мне нужно запросить таблицу в базе данных SQLite, чтобы вернуть все строки в таблице, которые соответствуют заданному набору слов.
Чтобы быть более точным: у меня есть база данных с ~ 80 000 записей. Одно из полей представляет собой текстовое поле, содержащее около 100–200 слов на запись. Что я хочу сделать, так это взять список из 200 ключевых слов из одного слова {"яблоко", "апельсин", "груша",...} и получить набор всех записей в таблице, содержащих хотя бы один ключевых слов в столбце описания.
Сразу очевидный способ сделать это с чем-то вроде этого:
SELECT stuff FROM table
WHERE (description LIKE '% apple %') or (description LIKE '% orange %') or ...
Если у меня есть 200 терминов, я получаю большое и неприятно выглядящее SQL-предложение, которое кажется мне неуклюжим, попахивает плохой практикой и, что неудивительно, требует много времени для обработки - более секунды на 1000 записей.
Этот ответ Лучшая производительность для SQLite Select Statement показался мне близким к тому, что мне нужно, и в результате я создал индекс, но согласно http://www.sqlite.org/optoverview.html sqlite не использует никаких оптимизаций, если оператор LIKE используется с подстановочным знаком % в начале.
Не будучи экспертом по SQL, я предполагаю, что делаю это глупо. Мне было интересно, может ли кто-нибудь с большим опытом предложить более разумный и, возможно, более эффективный способ сделать это?
В качестве альтернативы, есть ли лучший подход, который я мог бы использовать для решения проблемы?