У меня есть, как мне кажется, очень простой сценарий, но то, что я прочитал, звучит так, как будто это нелегко, если использовать полнотекстовый каталог и индексы SQL Server.
У меня есть 2 столбца, Имя и Фамилия. Я хочу поддержать полнотекстовый поиск по ним так, чтобы, если кто-то печатает «Джон Смит», люди с совпадением на и в первую очередь и в последнюю очередь появляются в первую очередь.
Несмотря на то, что легко создать индекс по нескольким столбцам и легко искать по нескольким столбцам, оценка не отражает несколько столбцов.
SELECT [Key], Rank
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>')
- Если CLAUSE_HERE - "Джон Смит", я не получаю результатов, потому что эта фраза не существует ни в одном из полей.
- Если это "Джон ИЛИ Смит", я получаю всех пользователей с любым именем в любом поле, отсортированных в бесполезном порядке.
- Если это "Джон И Смит", я не получаю результатов, потому что ни одно из полей не содержит обоих слов.
Похоже, что единственным решением является автоматическое создание запроса, который запускает containstable
для каждого поля, выполняет какие-то математические операции, суммирует оценки и т. Д. Это звучит правильно? Есть ли более простой способ обойти это? У моего фактического запроса гораздо больше полей - это упрощенный пример.