【发布时间】:2016-06-29 22:30:46
【问题描述】:
在我尝试创建全文搜索的数据库中,我需要构建一个表,其列名来自前一个表中的一列。在我当前的实现尝试中,全文索引在第一个表 Data 上完成,并在那里完成了对短语的搜索,然后制作了带有搜索结果的第二个表。
数据库的架构是
**Players**
Id
PlayerName
Blacklisted
...
**Details**
Id
Name -> FirstName, LastName, Team, Substitute, ...
...
**Data**
Id
DetailId
PlayerId
Content
表中的DetailId Data 与Details 中的Id 相关,PlayerId 与Players 中的Id 相关。如果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/ 和其他关于加权列的文章,但是当列最初是行数据时,我找不到地址加权列。
【问题讨论】:
-
您会回滚解决方案编辑,并在下面将其作为自我回答提供吗?然后,您可以单击相邻的勾号将问题标记为已解决。谢谢!
标签: sql-server full-text-search