ТАК на самом деле есть две части вопроса:
1) как использовать CONTAINSTABLE()
с кучей внутренних объединений?
Предположим, есть две таблицы:
Item (ItemID, CategoryID, Name)
Category (CategoryID, ParentCategoryID, Name)
используя "тупой" like
поиск это выглядит так:
create view [db].[vItem]
as
select i.*, c1.Name as SubCategory, c2.Name as Category, c3.Name as Department
from Item i
inner join category c1 on(c1.CategoryID=i.CategoryID)
inner join category c2 on(c1.ParentCategoryID=c2.CategoryID)
inner join category c3 on(c2.ParentCategoryID=c3.CategoryID)
затем выполните:
select *
from vItem
where (Name like '%[word 1]%' or SubCategory like '%[word 1]%' or Category like '%[word 1]%' or Department like '%[word 1]%') [and ... word n]
Я мог бы отбросить представление и внутреннее объединение 4 раза на CONTAINSTABLE()
, но это а) беспорядочно б) не одно и то же (каждая таблица ключей должна иметь все условия поиска, чтобы иметь какой-либо результат)
2) Как использовать все вышеперечисленное на языке запросов.
Опять же, при условии, что я просто использую like
подход - это очень просто.
from i in db.VItem
where i.Name.Contains("word 1") ...
Как это сделать с помощью полнотекстового поиска?