In der Datenbank, in der ich versuche, eine FullText-Suche zu erstellen, muss ich eine Tabelle mit den Spaltennamen aus einer Spalte in einer vorherigen Tabelle erstellen. In meinem aktuellen Implementierungsversuch ist die FullText-Indizierung auf der ersten Tabelle Data
abgeschlossen und die Suche nach dem Ausdruck erfolgt dort, dann wird die zweite Tabelle mit den Suchergebnissen erstellt.SQL Server FullText Suche mit gewichteten Spalten von einer vorherigen Spalte
Das Schema für die Datenbank ist
**Players**
Id
PlayerName
Blacklisted
...
**Details**
Id
Name -> FirstName, LastName, Team, Substitute, ...
...
**Data**
Id
DetailId
PlayerId
Content
DetailId
in der Tabelle Data
-Id
in Details
bezieht und PlayerId
betrifft Id
in Players
. Wenn es 1k Zeilen in Players
und 20 Zeilen in Details
gibt, dann gibt es 20k Zeilen in Data
.
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
)
…
Dann wird eine Tabelle erstellt, indem die Zeilen in einer Spalte ausgewählt werden. Ähnlich einem Drehpunkt.
…
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
ich eine Rang Tabelle mit dieser Implementierung zurückbringen kann, aber das Ziel ist es, Ergebnisse aus gewichteten Spalten zu erzeugen, so sagt die Spalte Playername
in den Rang trägt mehr als TeamName
sagen.
Ich habe versucht, eine Schema gebundene Ansicht mit einem Pivot zu machen, aber dann kann ich es wegen des Pivots nicht indizieren. Ich habe versucht, einen Blick auf diese Ansicht zu werfen, aber es scheint, dass die Metadaten vererbt werden, und das fühlt sich an wie eine klobige Methode.
Ich habe dann versucht, es als eine direkte Abfrage mit Unterabfragen in der Select-Anweisung, aber kann nicht aufgrund der Indizierung nicht wie Unterabfragen.
Ich habe dann versucht, mehrere Male zu verbinden, wieder der Index auf der Ansicht nicht wie selbstreferenzierende Joins.
Wie geht das?
Ich bin auf diesen Artikel http://developmentnow.com/2006/08/07/weighted-columns-in-sql-server-2005-full-text-search/ und andere Artikel hier über gewichtete Spalten gestoßen, jedoch nichts, soweit ich Adressen mit Gewichtungsspalten finden kann, wenn die Spalten anfänglich Zeilendaten waren.
Würdest du die Lösung zurücksetzen und sie unten als Selbstantwort eingeben? Sie können dann auf das nebenstehende Häkchen klicken, um die Frage als gelöst zu markieren. Vielen Dank! – halfer