InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Поиск по таблицам базы данных


Собственно, здесь начинается наша функция query_table. Выглядит она следующим образом:

 function query_table ($tablename, $q_num, $q_array)

Как параметры она принимает имя таблицы, по которой нужно провести поиск, количество слов в пользовательском запросе и массив с пользовательским запросом.

Поскольку, как указывалось раньше, таблицы базы данных на сайте образование.инфо содержат всего две колонки (номер страницы и ее содержание), первый и единственный запрос к базе данных будет довольно простым.

 $query="SELECT number, article from $tablename";
$result=mysql_query($query);

Теперь нам нужно посмотреть на результаты запроса. Вся эта информация хранится в хэше $result и сначала определимся, сколько рядов содержится в результатах запроса.

 $num_results=mysql_num_rows($result);

Теперь начинается процесс обсчета релевантности. Мы поочередно просматриваем каждую статью из $result и каждый раз, когда в статье встречается нужное нам слово, мы увеличиваем счетчик $relevancy на один пункт.

 for ($c=0;$c<$num_results;$c++)
{
$relevancy=0;
$row=mysql_fetch_object($result);
$mypage=$row->number;
$mycontent=strtolower(strip_tags($row->article));
for ($d=0; $d<$q_num; $d++)
{
$relevancy+=substr_count($mycontent, strtolower(strip_tags($q_array[$d])));
}//end of for
if ($relevancy>0)
$res["$mypage"]=$relevancy;

Итак, по порядку. В переменные $mypage и $mycontent мы занесли номер статьи, над которой работаем в данный момент и ее содержание. Функция strip_tags освободит наш документ от всех HTML-тэгов, а функция strtolower преобразует все в строчные буквы. После этого мы сравним запрос пользователя (который хранится в массиве $q_array) с содержанием $mycontent. Функция substr_count расскажет нам о том, сколько раз данное слово из запроса пользователя встречается в тексте статьи, после чего мы увеличим счетчик релевантности на соответствующее количество пунктов.

Эта операция проделывается с каждым словом из запроса пользователя, в итоге наша переменная $relevancy содержит суммарное количество баллов, начисленных данному документу. Пока что наш алгоритм релевантности не игнорирует ни союзов, ни предлогов, он даже не обращает внимания на тот факт, что пользователь мог ввести некоторые слова дважды (скажем "внучка за бабку, бабка за дедку, дедка за репку").

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

if ($relevancy>0)
$res["$mypage"]=$relevancy;

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

 if (count($res)>0)
arsort ($res);
return $res;

Расшифровать код выше нетрудно: если в хэше больше одного элемента, то его нужно отсортировать в обратном порядке, основываясь на поле "value", так как именно это поле содержит релевантность документа. Именно это и делает функция arsort, после чего хэш уходит "родительской функции".

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua