Поделиться через


Предложение RANK BY

Результаты запроса включают как строки, возвращаемые запросом, так и значение ранга для каждой строки, если столбец ранжирования включен в предложение SELECT. Значения ранга вычисляются поисковой системой и возвращаются в виде целых чисел в диапазоне от нуля до 1000. Чтобы сделать результаты ранжирования более значимыми, запрос может управлять вычислением необработанных значений ранга в предложении RANK BY.

Этот раздел организован следующим образом:

Предложение RANK BY

Синтаксис предложения RANK BY выглядит следующим образом:

WHERE ( <search_condition> ) 
RANK BY [ ( ] <rank_specification> [ ) ]

Предложение RANK BY применяется к search_condition непосредственно перед ним, фактически указывая более низкий или более высокий ранг для строк, возвращаемых этим условием поиска, чем строк, возвращаемых другим условием поиска. Круглые скобки, окружающие search_condition, являются обязательными. Круглые скобки, окружающие спецификацию ранжирования, являются необязательными.

К одному условию можно применить несколько предложений RANK BY. Вы можете добавить дополнительные предложения RANK BY один за другим с помощью круглых скобок.

Примечание

Полнотекстовые предикаты возвращают значения ранга в диапазоне от 0 до 1000. Значения ранжирования для всех документов, соответствующих не полнотекстового предиката, — 1000. Эти сведения должны учитываться при изменении значений ранга.

 

Часть rank_specification предложения RANKBY определяет одну или несколько функций, применяемых к значениям ранжирования. Функция WEIGHT применяет множитель к необработанму значению ранга для возвращаемой строки. Чем меньше множитель, тем ниже итоговое значение ранга. Функцию COERCION можно использовать для умножения, добавления или задания определенного значения ранга для возвращаемой строки. Каждая спецификация ранжирования может включать либо ноль, либо одну функцию WEIGHT, а также ноль или несколько функций COERCION. Если функции WEIGHT и COERCION включены в предложение RANK BY, функция WEIGHT должна быть первой.

Функция WEIGHT

Синтаксис функции WEIGHT:

WEIGHT ( <weight_multipler> ) 

Множитель должен быть десятичным числом от 0,001 до 1,000. Необработанное значение ранга, возвращаемое предикатом условия поиска, умножается на множитель веса, чтобы задать новое значение ранжирования.

В следующем примере функция WEIGHT дает документам со словом "Тетера" в поле System.Document.LastAuthor половину рангового значения документов с "Тетера" в поле System.Author:

WHERE CONTAINS ( System.Author,'"Theresa"' ) 
         RANK BY WEIGHT ( 1.000 )
      OR
      CONTAINS ( System.Document.LastAuthor,'"Theresa"' ) 
         RANK BY WEIGHT ( 0.500 ) 

 

Примечание

Функции взвешивания столбцов предиката CONTAINS и FREETEXT поддерживают сокращенный формат с использованием двоеточия между условием поиска и множителем ("программное обеспечение":0,25). Предложение RANK BY не поддерживает сокращенную форму.

 

Существует ограничение при использовании RANK BY WEIGHT: он не работает с предложениями CONTAINS, которые используют логические условия; Например, следующий пример не разрешен:

CONTAINS ( System.Author,'"Theresa" OR "Teresa"' ) RANK BY WEIGHT ( 0.400 )

Функция COERCION

Функцию приведения ранга можно использовать для изменения возвращаемого значения ранга путем сложения или умножения или присвоения ему определенного значения.

Синтаксис функции COERCION:

COERCION ( <coercion_operation> , <coercion_value> )

Значение приведения является целочисленным значением.

В следующей таблице описаны доступные параметры операции приведения.

Операция приведения Описание Диапазон значений
ABSOLUTE Возвращаемое значение ранга — это значение, указанное в значении приведения. от 0 до 1000
ADD Возвращаемое значение ранга — это сумма необработанного значения ранга и указанного значения приведения. С 0.001 по 1.0
MULTIPLY Возвращаемое значение ранжирования представляет собой произведение необработанного значения ранга и указанного значения приведения. С 0.001 по 1.0

 

 

Важно!

Поиск может возвращать ранговые значения только в диапазоне от 0 до 1000.

 

 

В следующем примере функция COERCION используется, чтобы задать для всех документов с "computer" в заголовке ранг 1000, а также уменьшить на четверть ранг документов, содержащих в заголовке "компьютер" и "программное обеспечение".

WHERE CONTAINS ( System.Title, 'computer' )
        RANK BY COERCION ( ABSOLUTE , 1000 )
        OR 
       CONTAINS ( System.Title, '"computer" AND "software"' )
        RANK BY COERCION ( MULTIPLY, 0.750 )