2010-11-21 4 views
2

У меня есть две таблицы, документы и ревизии. Документы имеют два столбца: идентификатор документа и заголовок, а в версиях - три столбца: идентификатор документа, идентификатор ревизии, тело.Индексирование полнотекстового поиска только на определенные строки

Когда я выполняю полнотекстовый поиск по столбцу тела таблицы ревизий, я хотел бы запросить только последнюю версию. Есть ли способ сказать SQL Server только индексировать строки для последней версии документа?

ответ

2

Afaik, нет возможности индексировать только записи с определенным идентификатором, но вы можете добавить в запрос последний идентификатор версии.

Это может быть сделано, как добавить:

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

Если вам всегда нужно только проиндексировать последнюю версию, может быть лучше, чтобы добавить тело этого пересмотра в таблице документов или в другую таблицу, которая имеет отношение 1: 1 к документу. Таким образом, каждый документ имеет одну проиндексированную ревизию, а остальные хранятся только для резервного копирования. Это особенно полезно, если ваши документы имеют много изменений.

+0

Спасибо! Я чувствую себя действительно грязным, просматривая все версии и выдавая результаты для других версий (не говоря уже о том, что, не зная об алгоритме, кажется, что он может исказить результаты общего ранга), поэтому я предполагаю, что пока я буду хранить последние ревизий в таблице документов, поэтому таблица ревизий существует как больше архива. – inolen