全文検索を作成しようとしているデータベースでは、前の表の1つの列からの列名を持つ表を作成する必要があります。私の現在の実装では、最初のテーブルData
でFullTextのインデックス作成が完了し、そこでフレーズの検索が行われた後、検索結果の2番目のテーブルが作成されます。前の1列の重み付け列を使用したSQL Serverの全文検索
データベースのスキーマが表に
**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
)
…
次に、1つの列の行を選択することによって表が作成されます。ピボットに似ています。
…
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