2010-09-22 3 views
2

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

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

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

Я хочу запустить ранжированный поиск терминов «Audi ИЛИ бмв», я ожидаю, чтобы получить равные рейтинги на всех результатах поиска.

 
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 


В самом деле, независимо от того, какая комбинация ОШ я, БМВ не всегда занимает больше или равна AUDI, даже если она кажется совершенно нелогичным. Я пробовал использовать некоторые AND в моем поисковом выражении, и все же он приносит странные результаты, поскольку BMW всегда проявляет себя более благоприятно, чем ожидалось.

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

ответ

1

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

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

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

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

... и текст CarID 14 короче текста CarID 9, поэтому по той же логике я бы ожидал, что CarID 14 превзойдет его ... может быть, мне просто нужно больше данных, чтобы действительно увидеть лучшие результаты. Спасибо за ваш отзыв. – 3advance

Смежные вопросы