-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Flashr

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 26.02.2007
Записей:
Комментариев:
Написано: 6574


Физ.лица, сортировка по релевантности

Воскресенье, 11 Апреля 2010 г. 22:03 + в цитатник
Разбирался на днях с интересным алгоритмом, точнее меня заинтересовала сама задача, а не ее реализация. Ибо реализация представляла из себя сложно понимаемый алгоритм дающий в итоге трехзначные числа. А задача состоит в том, чтобы отсортировать результаты поискового запроса по физическим лицам, когда есть три параметра - фамилия, имя, год рождения. Казалось бы, должен быть просто точный поиск по таблице с данными, откуда берется необходимость выдачи по релевантности? Очень просто, и без этого многих бы и не находили - у фамилии, которая является обязательной при поиске - есть 4 варианта исхода. Кроме точного соответствия, есть еще клички или аллиасы, а также вариации в произношении. При этом совпадение с аллиасом котируется больше, нежели совпадение по вариации или по дате рождения или имени. Наиболее понятное решение, когда исходам сравнения по каждому из трех вариантов ставиться в соответствие цифра на нужной позиции. В нашем случае - это трехзначное число в четверичной системе счисления (у сравнения по фамилии 4ре исхода). Однако, если учесть 2 момента, что значения имени и года рождения для нас равнозначны, и что у нас дискретные 4ре варианта входящего запроса: задано 3 поля, 2 и только фамилия; то можно свести результат вычисления релевантности поискового результата к двух-разрядному числу.

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

Соответственно, если по фамилии нет никакого из совпадений она не попадает в выдачу. А то, что у нас запросы дискретны по количеству параметров, то вся таблица из 36 вариантов для конечного запроса делится на 4 непересекающиеся при помощи полей где стоит или не стоит 1 при сравнении по году или имени. Таким образом у нас будет не более 9 различных значений релевантности при каждом поиске, да и считать весьма просто.
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку