Я новичок в поиске свободного текста, поэтому прошу прощения за вопрос новичка. Предположим, у меня есть следующий полнотекстовый индекс:Полнотекстовый поиск по конкатенированным столбцам?
Create FullText Index on Contacts(
FirstName,
LastName,
Organization
)
Key Index PK_Contacts_ContactID
Go
Я хочу, чтобы сделать поиск FREETEXT против всех трех колонок сцепленных
FirstName + ' ' + LastName + ' ' + Organization
Так что, к примеру
- Ищете
jim smith
возвратов все контакты по имени Джим Смит - Поиск
smith ibm
возвращает все контакты по имени Смит, которые работают t IBM
Это похоже на довольно распространенный сценарий. Я ожидал бы, чтобы это работало:
Select c.FirstName, c.LastName, c.Organization, ft.Rank
from FreeTextTable(Contacts, *, 'smith ibm') ft
Left Join Contacts c on ft.[Key]=c.ContactID
Order by ft.Rank Desc
, но это, по-видимому делает smith OR ibm
; он возвращает много Смитов, которые не работают в IBM, и наоборот. Удивительно, но поиск smith AND ibm
дает одинаковые результаты.
Это делает то, что я хочу ...
Select c.FirstName, c.LastName, c.Organization
from Contacts c
where Contains(*, 'smith') and Contains(*, 'ibm')
... но я не могу параметризовать запросы, поступающие от пользователя - я бы разбить строку поиска в слова себя и собрать SQL на лету, что является уродливым и небезопасным.
Спасибо - я закончил с использованием рассчитанного подхода столбца/триггера, чтобы заполнить поле SearchText и проиндексировать его. –