Как реализовать полнотекстовый поиск по нескольким столбцам на сервере SQL? - PullRequest
7 голосов
/ 11 мая 2010

Я пытаюсь реализовать полнотекстовый поиск по двум столбцам, для которых я создал представление: VendorName, ProductName. У меня работает полнотекстовый индекс и т. Д., Но фактический запрос вызывает у меня некоторые проблемы.

Я хочу, чтобы пользователи могли использовать некоторые стандартные соглашения о поиске, ИЛИ ИЛИ НЕТ, и группировать термины по (), что хорошо, но я хочу применить поиск по обоим столбцам, например, если бы мне нужно было выполнить запрос такие как:

SELECT * FROM vw_Search 
WHERE CONTAINS((VendorName, ProductName), "Apple AND iTunes")

Кажется, что он применяет запрос к каждому столбцу индивидуально, то есть проверяет имя поставщика для обоих терминов, а затем проверяет название продукта для обоих терминов, которые не будут совпадать, если поставщик не был назван «Apple iTunes».

Если я изменю запрос на:

SELECT * FROM vw_Search 
WHERE CONTAINS(VendorName, "Apple OR iTunes") 
AND CONTAINS(ProductName, "Apple OR iTunes")

тогда он работает, но нарушает другие поисковые запросы (например, поиск только apple), и для пользователя, пишущего запрос, это не имеет особого смысла, поскольку то, что они могут написать, - это И, но для работы требуется ИЛИ.

То, что я хочу, это чтобы он возвращался, если между этими двумя терминами был действительный поисковый термин, чтобы он соответствовал всем поставщикам с именем apple, например, названием продукта itunes.

Должен ли я создать отдельное поле в представлении, которое объединяет поля Vendor и Product и выполняет первый запрос для этого нового поля, или я что-то упускаю?

Помимо этого кто-нибудь знает о существующем методе проверки запросов?

1 Ответ

7 голосов
/ 11 мая 2010

В более ранних версиях SQL Server запросы совпали по нескольким столбцам.

Однако это считалось ошибкой .

Чтобы сопоставить несколько столбцов, необходимо объединить их в вычисляемый столбец и создать индекс по этому столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...