Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа) (544459), страница 4
Текст из файла (страница 4)
users_keys_table_name (adaptive_search_users_keys) – имя таблицы в базе данных для хранения идентификаторов и индивидуальных ключей пользователей. Если в момент идентификации пользователя таблица с таким именем не будет найдена в базе данных, то она будет создана автоматически. Таким образом, указав специализированное имя, можно использовать уже имеющуюся в базе данных таблицу индивидуальных ключей пользователей.
user_id (NULL) – идентификатор текущего пользователя. Именно по данному идентификатору будет осуществляться привязка результатов поиска к конкретному пользователю. Так как большинство web-приложений имеют собственный механизм аутентификации, то получение идентификатора текущего пользователя не представляет особого труда. По умолчанию библиотека сама сгенерирует уникальный идентификатор для пользователя, сохранит его в cookies в зашифрованном виде и в таблице идентификаторов пользователей базы данных.
max_word_length (15) – максимальная длина индексируемого слова. Рекомендуется указывать этот параметр для предотвращения хранения слишком длинных индексируемых слов. В отдельных случаях специфика области поисковых запросов может потребовать увеличения значения этого ограничения. Кроме того, указав в качестве значения параметра NULL или false, можно снять ограничения на максимальную длину индексируемого слова.
min_word_length (3) – минимальная длина индексируемого слова. Рекомендуется указывать этот параметр для предотвращения хранения слишком коротких индексируемых слов. Как правило, такие слова лишь «засоряют» таблицу индексируемых слов. В отдельных случаях специфика области поисковых запросов может потребовать уменьшения значения этого параметра. По аналогии с параметром max_word_length, можно указать в качестве значения NULL или false и тем самым снять все ограничения на минимальную длину индексируемого слова.
words_lifetime (NULL) – продолжительность хранения (секунд) индексируемых слов в базе данных. Если указано значение параметра, то устаревшие слова будут удаляться из базы данных, не допуская её переполнения. Также данный параметр может использоваться для предотвращения ситуаций, когда устаревшие поисковые запросы оказывают своё влияние на результаты поисковой выдачи.
words_limit (1000) – ограничение на максимальное число индексируемых слов на одного пользователя. Если указано числовое значение параметра, то устаревшие и редко запрашиваемые слова будут удаляться из базы данных по мере надобности, не допуская её переполнения. Также данный параметр может использоваться для предотвращения ситуаций, когда устаревшие или редко используемые слова поисковых запросов оказывают своё влияние на результаты поисковой выдачи. При настройке данного параметра необходимо учитывать общее число пользователей системы. Так, например, если в системе зарегистрировано 1000 пользователей, а значение параметра words_limit равно 1000, то таблица индексируемых слов через некоторое время может иметь строк.
adaptive (true) – переключатель адаптации результатов поиска. Если параметр установлен в false (выключен), то будет производиться обычный (не адаптивный) поиск. Отключение адаптивного поиска может потребоваться при отладке и тестировании работы основного приложения.
cookie_user_id_name (adaptive_search_user_id) – имя cookie для хранения зашифрованного идентификатора пользователя.
cookie_user_id_lifetime (2592000) – продолжительность хранения (секунд) зашифрованного идентификатора пользователя в cookie. Если в течение данного времени не будет сделано ни одного поискового запроса, для пользователя будет сгенерирован новый идентификатор.
cookie_hash_algo (sha256) – алгоритм хеширования, используемый при шифровании идентификатора пользователя. Список доступных при разработке алгоритмов может быть получен с помощью PHP функции hash_algos().
highlight (false) – автоматическая подсветка результатов поиска. По умолчанию слова поискового запроса не подсвечиваются в тексте результатов при выводе. Подсветка может быть получена с помощью специального метода библиотеки, либо включением данного параметра. Подсвеченные слова заключаются в тег <span> с классом “hl”.
autofree (false) – автоматическая очистка ресурсов при работе с результатами поиска. Включение данного параметра накладывает определённые ограничения на процесс работы с результатами, что позволяет уменьшить требуемый объём памяти при работе с библиотекой.
3.4. Тестирование
Тестирование скорости работы библиотеки производилось в базах данных mSQL 3.9, Microsoft SQL Server 2008 R2, MySQL 5.5, Oracle 9i, PostgreSQL 9.1, SQLite 3.7 и InterBase 7.5 на выборках объёмом 5000, 10000, 25000 и 50000 текстов. Все тексты были сгенерированы с помощью сервиса «Яндекс.Рефераты». Каждый текс содержал около 1500 слов. Поисковые запросы, используемые при тестировании, содержали 3 – 5 слов, а соответствующие им результаты образовывали не менее 0,5% всего имеющегося массива данных. Тестирование проводилось при десяти различных ограничениях на максимальное число индексируемых слов: 100, 200, 300, 400, 500, 600, 700, 800, 900 и 1000 слов. В каждом случае временные показатели усреднялись по результатам 100 измерений. В общей сложности было проведено 28000 измерений.
Весь процесс тестирования осуществлялся в Ubuntu 12.04, дистрибутиве операционной системы Linux, на выделенном сервере следующей конфигурации: процессор Intel Xeon E3-1230 3.2 ГГц, 8 Гб оперативной памяти, 2x1000 Гб HDD SATA, 2 Гбит LAN.
В ходе тестирования наблюдался экспоненциальный рост времени поиска при увеличении числа индексируемых слов, что хорошо видно на графиках (рисунки 3.2 – 3.8).
Рис. 3.2. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных MySQL.
Рис. 3.3. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных Oracle.
Рис. 3.4. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных Microsoft SQL Server.
Рис. 3.5. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных mSQL.
Рис. 3.6. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных SQLite.
Рис. 3.7. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных PostgreSQL.
Рис. 3.8. Зависимость времени выполнения поискового запроса
от числа проиндексированных слов в базе данных InterBase.
Результаты тестирования показывают, что разработанная библиотека позволяет осуществлять адаптивный поиск информации на выборках из 50000 записей за приемлемое время – до 2,5 сек. В результате установки ограничений на число индексируемых слов для каждого пользователя можно добиться ускорения поиска в 10 – 20 раз. На небольших массивах данных (до 5000 записей) адаптивный поиск осуществлялся за время, не превышающее 0,2 сек, даже при ограничении в 1000 индексируемых слов на одного пользователя.
Для проверки механизма адаптации было написано Web-приложение с использованием разработанной библиотеки, позволяющее осуществлять адаптивный поиск в базе данных MySQL (рисунок 3.9). Область поиска данного приложения представляет собой несколько небольших текстов, сгенерированных с помощью сервиса «Яндекс.Рефераты», каждый из которых содержит слово «белый» (или его форму). Также во всех текстах в различных формах присутствуют прилагательные «красный» и/или «синий». Для наблюдения за распределением прилагательных «красный» и «синий» в результатах поисковой выдачи в верхней части Web-приложения находится схема их распределения.
Рис. 3.9. Общий вид Web-приложения для тестирования механизма адаптации.
На максимальное число индексируемых слов на одного пользователя (параметр words_limit) было установлено ограничение, равное 1. Процесс проверки адаптации результатов поиска заключался в последовательном выполнении трёх поисковых запросов: «белый», «красный», «белый». Полученные для каждого запроса схемы распределения форм прилагательных «синий» и «красных» представлены на рисунках 3.10 – 3.12.
Рис. 3.10. Схема распределения цветов в результате выполнения запроса «белый» в первый раз.
Рис. 3.11. Схема распределения цветов в результате выполнения запроса «красный».
Рис. 3.12. Схема распределения цветов в результате выполнения запроса «белый» во второй раз.
Поясним полученные распределения. Вначале таблица индексируемых слов пользователя была пуста, то есть системе ничего не было известно о предпочтениях пользователя. Поэтому в результате выполнения запроса «белый» в первый раз мы можем видеть равномерное распределение цветов на схеме. Слово «белый» попадает в таблицу индексируемых слов. После выполнения запроса «красный» система помещает слово «красный» в таблицу индексируемых слов, а слово «белый» оттуда удаляется, так как значение параметра words_limit равно 1. При повторном поиске слова «белый» мы наблюдаем эффект адаптации результатов – все результаты, содержащие формы прилагательного «красный» сместились в начало поисковой выдачи (влево на схеме).
Выводы по главе 3
Осуществлено проектирование, кодирование на языке PHP и тестирование программной библиотеки для осуществления адаптивного поиска в базах данных Web-приложений. Полученные в ходе тестирования результаты свидетельствуют о возможности успешного применения библиотеки при разработке Web-приложений.
ЗАКЛЮЧЕНИЕ
В данной работе были рассмотрены основные понятия, задачи и методы информационного поиска, дано понятие и описание идеи адаптивного поиска. Представленные сведения позволили объективно рассмотреть проблему написания алгоритма адаптивного поиска в базах данных.
Описан метод хранения предпочтений пользователей, полученных на основании предыдущих поисковых запросов. С использованием данного метода был разработан алгоритм адаптивного поиска в базах данных, что позволило осуществить проектирование, кодирование на языке PHP и тестирование программной библиотеки для осуществления адаптивного поиска в базах данных Web-приложений.
Результаты тестирования библиотеки подтверждают возможность применения библиотеки не только в малых, но и средних web-приложениях, размеры баз данных которых исчисляются десятками тысяч записей.
Описанные в ходе работы недостатки адаптивного поиска оставляют широкий простор для дальнейшего изучения данного направления информационного поиска.
ПРИЛОЖЕНИЯ
Приложение 1. Исходный код библиотеки
<?php
class DB
{
function &factory($type, $options = false)