Я новичок в свободном текстовом поиске, так что извините за вопрос новичка. Предположим, у меня есть следующий полнотекстовый индекс:
Create FullText Index on Contacts(
FirstName,
LastName,
Organization
)
Key Index PK_Contacts_ContactID
Go
Я хочу выполнить поиск в свободном тексте по всем объединенным столбцам
FirstName + ' ' + LastName + ' ' + Organization
Так что например
- Поиск
jim smith
возвращает все контакты с именем Джим Смит
- Поиск
smith ibm
возвращает все контакты по имени Смит, которые работают в 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 на лету, что уродливо и небезопасно.