Моя простая реализация SQLite FTS3 в настоящее время сопоставляет пользовательские запросы с сохраненными результатами и возвращает их, если эти результаты содержат все слова в пользовательском запросе (другими словами, таблица FTS была создана с использованием простого токенизатора).
Теперь я хочу сделать поиск более интеллектуальным в этом, я хочу, чтобы он ранжировал / упорядочивал результаты по количеству слов в запросе, которые соответствуют результатам.Например,
SELECT name FROM nametable WHERE name MATCH 'fast food restaurant'
, который в настоящее время возвращает
SUBWAY FAST FOOD RESTAURANT
MCDONALDS FAST FOOD RESTAURANT
, должен вернуть
SUBWAY FAST FOOD RESTAURANT
MCDONALDS FAST FOOD RESTAURANT
CHIPOTLE FAST FOOD
PIZZA FAST FOOD
GOOD FOOD OUTLET
в этом порядке.Другими словами, результаты поиска не должны ограничиваться результатами, которые обязательно содержат все слова пользовательских запросов, а скорее помещают результаты, которые содержат все слова выше в списке, оставляя место для результатов, которые возвращают частичное совпадение.
Один простой способ сделать это - выполнить несколько запросов, используя все перестановки ввода пользователя и объединить результаты в требуемом порядке, но это будет довольно неэффективно.