SQL 使用前一列的加权列进行服务器全文搜索

SQL Server FullText Search with Weighted Columns from Previous One Column

在我尝试创建全文搜索的数据库中,我需要构建一个 table,其列名来自前一个 table 中的一个列。在我当前的实现尝试中,全文索引是在第一个 table Data 上完成的,并且在那里完成了对短语的搜索,然后是第二个 table 和搜索结果。

数据库的模式是

**Players**

  Id
  PlayerName
  Blacklisted
  ...

**Details**
  Id
  Name -> FirstName, LastName, Team, Substitute, ...
  ...

**Data**
  Id
  DetailId
  PlayerId
  Content
table中的

DetailId DataDetails中的Id相关,PlayerIdId中的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 
)
…

然后 table 是通过 select 将一列中的行创建的。类似于枢轴。

…
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

我可以 return 使用此实现排名 table,但目的是能够从加权列中生成结果,所以说列 Playername 有助于排名多说 TeamName.

我曾尝试使用枢轴制作模式绑定视图,但后来由于枢轴的原因我无法为其编制索引。我已经尝试制作该视图的视图,但元数据似乎是继承的,而且感觉像是一种笨拙的方法。

然后我尝试在 select 语句中使用子查询将其作为直接查询来执行,但由于索引不喜欢子查询而无法实现。

然后我多次尝试连接,视图上的索引又不喜欢自引用连接。

如何做到这一点?

我看过这篇文章 http://developmentnow.com/2006/08/07/weighted-columns-in-sql-server-2005-full-text-search/ 以及此处有关加权列的其他文章,但是据我所知,当列最初是行数据时,我找不到地址加权列。

一个非常有效的简单解决方案。对另一个 table 中包含所需 ID 的行施加权重,将 table 左连接到已应用全文搜索的 table,然后将排名乘以权重。继续之前的实施。

在出现的代码中

DECLARE @Weight TABLE
(
    DetailID INT,
    [Weight] FLOAT
);

INSERT INTO @Weight VALUES 
(1, 0.80),
(2, 0.80),
(3, 0.50);


WITH RankedPlayers AS
(
    SELECT PlayerID, SUM(KT.[RANK] * ISNULL(cw.[Weight], 0.10)) AS Rnk
    FROM Data c
    INNER JOIN FREETEXTTABLE(dbo.Data, Content, 'Karl Kognition C404') AS KT ON c.DataID = KT.[KEY]
    LEFT JOIN @Weight cw ON c.DetailID = cw.DetailID

    GROUP BY c.PlayerID 
)

SELECT rc.Rnk,
...

我在这里使用临时 table 作为概念证据。我正在考虑将列 Weights 添加到 table Details 以避免不必要的 table 和左联接。