2010-05-11 2 views
6

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

Я хочу, чтобы пользователи имели возможность использовать некоторые стандартные соглашения о поиске, AND AND NOT и группировать термины по(), которые являются точными, но я хочу применить поиск по обоим столбцам, например, если бы я запускал запроса, такие как:

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") 

затем он работает, но влезает другие поисковые запросы (например, в поисках только яблоко) и от пользователя написания запроса не имеет особого смысла, так как то, что они вероятно, будут писать AND, но для этого требуется OR.

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

Должен ли я создать отдельное поле в представлении, которое объединяет поля «Поставщик» и «Продукт» и выполняет первый запрос в этом новом поле или что-то у меня отсутствует?

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

ответ

7

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

Однако считается, что это bug.

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

+0

Это кажется невозможным с представлением SQL Server - я ошибаюсь? (не может создать некластеризованный индекс для представления, которое вычисляло столбцы) –

+0

@RoyTinker: что вы подразумеваете под «представлением, которое вычисляло столбцы»? – Quassnoi

+0

Ничего, мой комментарий неверен (возможно _is_). Под «представлением, которое вычисляло столбцы» я имел в виду то, что вы сказали выше, предполагая, что вы хотели создать представление. –

Смежные вопросы