В настоящее время у меня есть хранимая процедура, основная цель которой - выполнить полнотекстовый поиск по базе данных фильмов и телевизионных шоу. Чтобы заставить его выполнять частичный поиск по ключевым словам, я добавил код в SQL, чтобы разделить поисковый запрос по пробелам, и вывел оператор, подобный следующему:
"batman*" ~ "be*"
Исходная строка, например "batman be", может быть сгенерирована из текстового поля на странице, когда пользователь печатает, и при каждом событии javascript keyup я отправляю все, что находится в этом текстовом поле, в сохраненный процесс для получения результатов получить результаты, как я печатаю (например, автозаполнение). В этом случае пользователь, возможно, искал «Batman Begins» или «The Batman: Batgirl Begins» (эпизод телешоу), и в результате они оба должны появиться.
Ниже приведен пример моего запроса. В приведенном выше примере @partialKeywordString равен "batman*" ~ "be*"
.
SELECT f.title
FROM Films f INNER JOIN
CONTAINSTABLE(Films, Title, @partialKeywordString) f_key ON f.filmid = f_key.[key]
ORDER BY f_key.Rank DESC
Проблема, с которой я столкнулся при запросе, заключается в том, что рейтинг не соответствует ожиданиям. Если бы я просто искал «Бэтмен», можно было бы полагать, что все названия фильмов, начиная со слова «Бэтмен» или только содержащие его, будут появляться первыми. Но они этого не делают.
Ниже приведен пример того, что происходит, когда кто-то ищет просто «бэтмэн»:
«Бэтмен: мультсериал - Эпизод 114»
«Приключения Бэтмена и Робина - Эпизод 218»
"Бэтмен и Робин - Эпизод 101"
"Бэтмен - Эпизод 101"
"Бэтмен и Робин - Эпизод 204"
Гораздо дальше в списке находится фильм, который я искал - "Бэтмен начинается" или даже просто "Бэтмен".
Я ищу совет о том, как настроить этот запрос - я определенно не эксперт по SQL, и мне кажется, что я просто обработал приведенный выше код, чтобы заставить его работать. У меня есть ощущение, что есть более элегантное или мощное решение, и я просто еще не нашел его.
Заранее спасибо