Пример полнотекстового ранжирования SQL Server - PullRequest
2 голосов
/ 23 сентября 2010

Пока что я не получаю значимых результатов от своих полнотекстовых запросов, поэтому я решил привести простой пример того, что я пытаюсь сделать, и ожидаемых результатов.

Я сделалследующая тестовая таблица (tblCars) с полнотекстовым включением для столбца [Car] и первичного ключа [CarID].

CarID Car
----- -----------------
9     BMW 330Ci 2009
14    AUDI A4 2010
16    AUDI A3 2.0T 2009

Я хочу запустить ранжированный поиск по терминам audi OR bmw 'Я ожидаю получить равные рейтинги во всех результатах поиска.

SELECT tblCars.*, [RANK] AS Ranked FROM viewCarSearch 
    INNER JOIN 
    (SELECT [KEY] AS CarID, [RANK] AS Ranked FROM CONTAINSTABLE 
    (tblCars, Car, @SearchOr))
    tblSearch ON tblCars.CarID = tblSearch.CarID 

Вместо этого я получаю это:

CarID Car                Ranked
----- ------------------ -------
9     BMW 330Ci 2009     48
14    AUDI A4 2010       32
16    AUDI A3 2.0T 2009  32


Фактически, независимо от того, какую комбинацию операционных решений я делаю, BMWвсегда оценивается выше или равным AUDI, даже если это кажется совершенно нелогичным.Я пытался использовать некоторые AND в своем поисковом запросе, и все же он дает странные результаты, причем BMW всегда показывает более благоприятно, чем ожидалось.

Может кто-нибудь указать, где я иду не так ... Ядумая, что мои ожидания не оправдались, но я не представляю, как получу хорошие результаты для большого стола.

1 Ответ

1 голос
/ 23 сентября 2010

Очевидно, что Microsoft считает, что BMW - превосходящая машина для Audi.: -)

Хорошо, серьезно, есть много факторов, которые влияют на вычисление возвращенного RANK, который является числом без единицы от 1 до 1000. Полный текст в основном использует Индекс Жакара для вычисления рангов,Другие факторы, принимаемые во внимание, включают длину документа (при прочих равных условиях более короткие документы будут иметь более высокий рейтинг, чем более длинные документы) и число вхождений поискового слова / фразы в документе.

Моя лучшая догадка при объяснении вашегоРезультаты, и я подчеркиваю, что это только обоснованное предположение, что:

  • CarID 14 и 16 имеют очень похожий текст, первые 10 символов различаются только двумя символами (4 против 3 в позиции 7, 0 против. В позиции 10), поэтому они будут ранжироваться близко друг к другу.Фактически, в вашем примере они равны.
  • Текст CarID 9 короче, чем CarID 16, поэтому он заслуживает более высокого рейтинга.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...