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