我必须对两个表格进行全文查询:文章和文章标签。
文章表
ArticleID
Title
Description
Version
商品标签表
TagID
ArticleID
Version
TagName
我最初的想法是创建一个视图,从中选择文章以及由串联的标签字符串组成的另一列,但这似乎是可疑的,因为大多数解决方案建议使用FOR XML技术进行串联,而根据Microsoft,这是不好,因为它不是它的预期目的。
在其他文章中,我看到似乎最好先创建一个视图,然后将该视图和相关列添加到全文目录中。我以前从未在全文索引/目录中使用过视图,因此我对此不确定。
对该视图的查询可能如下所示:
select * from
Article_Versions av
left join Article_Tags avt on av.ArticleID = avt.ArticleID and av.version = avt.version
where
not exists(select 1 from Article_Versions av2 where av2.ArticleID = av.ArticleID and av2.version > av.Version)
order by
av.articleid asc
注意:我在这里使用NOT EXISTS仅提取文章/标签的最新版本。
这样,我将为每篇文章重复记录,其中该文章具有多个关联的标签。我可以通过使用Distinct来解决此问题,前提是我的最终查询不包含Tag表列。
如果我可以创建这样的视图并假设其结构如下:
ArticleTagView
ArticleID
Title
Description
TagName
Version
我假设我可以为标题,说明和标签名列建立索引?
我可能会如下查询该视图:
SELECT DISTINCT
fttAtv.[RANK]
ArticleID,
Title,
Description,
Version
FROM
CONTAINSTABLE(ArticleTagView, *, 'search-term') as fttAtv
INNER JOIN ArticleTagView atv on atv.ArticleID = fttAtv.[KEY]
ORDER BY
fttAtv.[RANK]
我要朝正确的方向前进吗?