2010-11-21 9 views
2

Ich habe zwei Tabellen, Dokumente und Revisionen. Dokumente haben zwei Spalten: Dokument-ID und Titel und Revisionen hat 3 Spalten: Dokument-ID, Revisions-ID, Text.Volltextsuche Indizierung nur in bestimmten Zeilen

Wenn ich meine Volltextsuche für die Rumpfspalte der Revisions-Tabelle ausführen, möchte ich nur mit der neuesten Revision abfragen. Gibt es eine Möglichkeit, SQL Server anweisen, nur für die neueste Revision eines Dokuments in Zeilen zu indizieren?

Antwort

2

Afaik, es gibt keine Möglichkeit, nur Datensätze mit einer bestimmten ID zu indizieren, aber Sie können die letzte Revisions-ID zu Ihrer Abfrage hinzufügen.

getan werden kann, wie das Hinzufügen von:

SELECT 
    * 
FROM 
    revisions r 
WHERE 
    /* Your r.body condition AND */ 
    r.revisionId = 
    (SELECT 
     MAX(mr.revisionId) 
    FROM 
     revisions mr 
    WHERE mr.documentid = r.documentid) 

Wenn Sie immer nur auf Index benötigen die neueste Version, es besser sein kann, den Körper von dieser Revision auf die Dokumente Tabelle oder zu einer anderen Tabelle hinzuzufügen, hat eine 1: 1 Beziehung zum Dokument. Auf diese Weise hat jedes Dokument eine indizierte Revision, während die anderen nur für die Sicherung gespeichert sind. Dies ist besonders nützlich, wenn Ihre Dokumente viele Revisionen haben.

+0

Danke! Ich finde es sehr dreckig, alle Revisionen zu durchforsten und Ergebnisse für andere Revisionen rauszuwerfen (ganz zu schweigen davon, ohne viel über den Algorithmus zu wissen, dass er die Gesamtrang-Ergebnisse verfälschen könnte), also denke ich, dass ich momentan die neuesten speichern werde Revisionen in der Dokumententabelle, so dass die Revisions-Tabelle als mehr von einem Archiv existiert. – inolen