Предпочитаемый подход для получения ранжированных результатов SQL? - PullRequest
2 голосов
/ 23 октября 2009

Мне нужно построить логику поиска, которая дает ранжированные результаты. Простым примером будет запрос к таблице со столбцами имя, фамилия и почтовый индекс. Требуемым выводом будет список совпадающих строк в порядке «степени соответствия».

Т.е., наилучшими результатами будут те, которые сопоставлены во всех трех столбцах, за ними следуют те, которые сопоставляются только в двух, а затем совпадения в одном столбце.

Есть ли признанное предпочтение, скажем, полнотекстового индексирования по нескольким запросам и объединению результатов? Есть что-то, что я определенно не должен делать?

Я понимаю, что все это довольно расплывчато и немного расходится со спецификой вопросов SO, но я ищу руководство по подходу, а не вопрос типа «сделай домашнее задание»: -)

(Платформа - SQL Server 2005)

Ответы [ 2 ]

1 голос
/ 23 октября 2009

Полнотекстовая индексация определенно даст вам это - вы можете запросить FTS (полнотекстовый сервер) с помощью CONTAINSTABLE или FREETEXTTABLE и получить список возможных совпадений, включая их рейтинг / релевантность.

Ознакомьтесь с отличными вступительными статьями по полнотекстовому поиску SQL Server на Simple Talk:

как хорошая отправная точка.

Марк

0 голосов
/ 23 октября 2009

Вот быстрое sql-решение, соответствующее вашему вопросу. После создания этой функции вы можете
ORDER BY dbo.func_getWeightByColumn(@firstname, firstname, @lastname, lastname, @zipcode, zipcode) DESC

CREATE FUNCTION [dbo].[func_getWeightByColumn] 
(
 @p1a varchar(50),
 @p1b  varchar(50),
 @p2a varchar(50) = 'a',
 @p2b  varchar(50) = 'b',
 @p3a varchar(50) = 'a',
 @p3b  varchar(50) = 'b',
)
RETURNS int
AS
BEGIN
 DECLARE @Result int
 SET @Result = 0

 IF @p1a = @p1b 
 BEGIN
  SET @Result = @Result + 1
 END

 IF @p2a = @p2b 
 BEGIN
  SET @Result = @Result + 1
 END

 IF @p3a = @p3b 
 BEGIN
  SET @Result = @Result + 1
 END

 RETURN @Result
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...