Функции CONTAINSTABLE и FREETEXTTABLE возвращают
столбец с именем RANK, содержащий порядковые номера от 0 до 1000 (ранжирующие
значения). Эти
значения используются для ранжирования возвращенных строк согласно их
соответствию критерию выбора. Ранжирующие
значения указывают только относительный порядок релевантности строк в
результирующем наборе, при этом чем меньше значение, тем меньше релевантность. Фактические
значения несущественны и, как правило, различны для каждого выполнения запроса.
Примечание |
Запросы, использующие предикаты CONTAINS и FREETEXT, не возвращают
ранжирующие значения.
|
Число элементов, совпадающих с условиями поиска, часто бывает очень велико. Чтобы
запросы CONTAINSTABLE и FREETEXTTABLE не возвращали слишком много соответствий,
следует использовать необязательный параметр top_n_by_rank,
в результате чего будет возвращаться только подмножество строк.top_n_by_rank —
это целочисленное значение n,
указывающее, что следует возвратить только n совпадений
с самым высоким рангом в нисходящем порядке. Если
параметр top_n_by_rank скомбинирован
с другими параметрами, то запрос может вернуть меньше строк, чем фактически
соответствует всем предикатам.
SQL Server упорядочивает соответствия по рангу и возвращает заданное число
строк. Это
может привести к значительному повышению производительности.Например,
запрос, обычно возвращающий 100 000 строк из таблицы с миллионом строк,
обрабатывается гораздо быстрее, если запросить всего 100 строк с наивысшими
ранжирующими значениями.
ПРИМЕР- вернёт максимум 300 записей
SELECT
h2.name AS [names], h.name AS [problems],h.id AS id2,h.id , h.createdat,h2.id AS
[problim_id],K.RANK FROM [База_Решений] h(NOLOCK)
JOIN [База_Знаний] h2 ON h2.id=h.[ключ_базы]
INNER JOIN
CONTAINSTABLE(База_Решений, (name,[Описание]), 'insert',
300) AS K
ON h.id= K.[KEY]
SELECT h2.name AS [names], h.name AS [problems],h.id AS id2,h.id ,
h.createdat,h2.id AS [problim_id],K.RANK FROM [База_Решений] h(NOLOCK)
JOIN [База_Знаний] h2 ON h2.id=h.[ключ_базы]
INNER JOIN
FREETEXTTABLE(База_Решений, (name,[Описание]), 'select',
300) AS K
ON h.id= K.[KEY]