在我尝试创建全文搜索的数据库中,我需要构造一个表,其列名来自上一个表中的一列。在我当前的实施尝试中,全文索引在第一张表Data
上完成,并且在那里搜索该短语,然后制作具有搜索结果的第二张表。SQL Server全文搜索与来自上一列的加权列
为数据库中的模式是
**Players**
Id
PlayerName
Blacklisted
...
**Details**
Id
Name -> FirstName, LastName, Team, Substitute, ...
...
**Data**
Id
DetailId
PlayerId
Content
在表Data
涉及Id
在Details
DetailId
,和PlayerId
涉及Id
在Players
。如果Players
中有1k行,Details
中有20行,则Data
中有20k行。
WITH RankedPlayers AS
(
SELECT PlayerID, SUM(KT.[RANK]) AS Rnk
FROM Data c
INNER JOIN FREETEXTTABLE(dbo.Data, Content, '"Some phrase like team name and player name"')
AS KT ON c. DataID = KT.[KEY]
GROUP BY c.PlayerID
)
…
然后,通过选择一列中的行来制作表格。类似于一个枢轴。
…
SELECT rc.Rnk,
c.PlayerID,
PlayerName,
TeamID,
…
(SELECT Content FROM dbo.Data data WHERE DetailID = 1 AND data.PlayerID = c.PlayerID) AS [TeamName],
…
FROM dbo.Players c
JOIN RankedPlayers rc ON c. PlayerID = rc. PlayerID
ORDER BY rc.Rnk DESC
我可以返回一个排名表,这个实现,其目的不过是为了能够生产从加权列的结果,所以说,列Playername
有助于等级超过说TeamName
。
我已经尝试使用数据透视表制作一个模式绑定视图,但因为透视而无法对其进行索引。我试图对这种观点作出评论,但似乎元数据是继承的,再加上那感觉就像一个笨重的方法。
然后我试图做一个直接查询在select语句中使用子查询,但不能由于索引不喜欢子查询。
然后我试图加入多次,再次在视图上的索引不喜欢自引用连接。
如何做到这一点?
我遇到这篇文章http://developmentnow.com/2006/08/07/weighted-columns-in-sql-server-2005-full-text-search/,和其他文章这里关于加权列,但是没有什么,只要我能找到地址加权列当列最初是行数据。
您是否会回滚解决方案编辑,并将其作为下面的自我回答提供?然后,您可以单击相邻的刻度标记以将问题标记为已解决。谢谢! – halfer