Pull to refresh

Сервис персонального поиска книг

Reading time3 min
Views928
Добрый день, друзья.

Разрешите представить вашему вниманию сервис персонального поиска книг. В отличие от классического поиска, здесь система, однажды получив запросы от пользователя, будет проводить по ним поиск вновь и вновь. При нахождении каждого нового совпадения система отправляет уведомление пользователю. И так повторяется до тех пор, пока пользователь не найдет все книги, что ему нужно, и не удалит свои поисковые запросы.



Идея персонального поиска



Полагаю, что я не являюсь первооткрывателем идеи персонального поиска. Тем не менее, кратко остановлюсь на этом. Итак, предположим, что мы попали на какой-то интересный сайт (допустим, посвященный продаже и обмену книг, как у меня). Здесь мы видим, что пользователи регулярно добавляют новые книги. И все бы хорошо, только вот ходить постоянно на сайт в надежде, что вот-вот появится что-то нужное нам — это как-то неудобно… Да и люди мы занятЫе, можем подзабыть…

Поэтому сразу возникает идея — а что, если сгрузить всю «грязную работу» на плечи поискового робота? Звучит заманчиво! Пусть он сам ищет те книги, которые мы ему скажем, и беспокоит (уведомляет) нас только в том случае, когда такие книги действительно появляются.

Если подумать, можно найти массу случаев, где может применяться такой же подход. Например, уведомление о том, что в городе появилась подходящая вакансия для работы. Что в аптеку привезли требуемое лекарство (мало ли, человек с хронической болезнью, а лекарство заканчивается). Что появился интересущий гаджет/видеокарта/жесткий диск… Вроде бы простые вещи, но приходится тратить свое время. К тому же регулярно. А если информация еще раскидана по десятку сайтов? В-общем, неудобно.

Персональный поиск книг



Впрочем, вернемся к книгам. Книги удобны тем, что у них легко определяется, соответствует ли книга поисковому запросу или нет. Например, «Лукьяненко» — это всегда книги Лукьяненко, а «Похороните меня за плинтусом» — это именно такая книга, и никакая другая. Поэтому процентов 95 всей работы сходу может выполнять сам поисковый алгоритм, а вот остальные 5 процентов остаются на долю редактора. Что делать — некоторые поисковые запросы выглядят довольно неоднозначно и дают большой поток нерелевантных совпадений. Приходится отсеивать их руками.

Тем не менее, даже в такой простой модели цифры довольно неплохие: примерно из 3 тысяч входящих книг и около 200 поисковых запросов было найдено порядка 300 подходящих книг. То есть, фактически, каждая десятая в момент своего добавления уже имеет потенциального покупателя (а иногда и нескольких сразу).

Напоследок открою один маленький технический секрет: если в поисковый запрос введен автор, то система ищет не только прямой вариант, но и его синонимы (например, «Лукьяненко» = «Сергей Лукьяненко» = «Лукьяненко, Сергей» = «Лукьяненко С.»). Синонимы хранятся в базе и пополняются по мере сил и возможности, а также наличия финансирования от рекламы на сайте :-)

Расширение сервиса



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

Однако и это еще не самое вкусное. Буквально на днях удалось расширить сферу поиска не только книгами с нашего сайта, но и из сообществ «Живого журнала». В систему было подключено порядка 30 rss-лент (тех книжных сообществ, которые активны). Далее скрипт скачивает их содержимое и ищет внутри сообщений поисковые слова. Для актуальности анализируются только те сообщения, которые отстоят не более, чем на 20 дней от текущей даты. В первом запуске было сразу же обнаружено около 50 книг, которые подходят под поисковые запросы пользователей — опять же, весьма неплохой показатель.

Пока еще алгоритмы «сыроваты», но в планах можно будет подключать любые другие книжные проекты, которые выводят свои книги через rss-ленты. Кроме того, позже планируется ввести «область персонального поиска» — «в моем городе», «в моем и ближайших городах», «по всем городам». Ведь бывает, что кто-то ищет редкую книгу и готов заказать ее даже из-за рубежа, а кто-то — бестселлеры в своем городе.

Производительность



Производительность — это отдельный вопрос. Алгоритм довольно сильно потребляет ресурсы, поэтому приходится запускать его на локальной копии базы (удобно — делается бэкап и сразу выполняется по нему поиск).

Типичные цифры: общий размер таблицы книг — около 11 тысяч записей, поиск запускается при добавлении каждых 200-300 записей. Число запросов — около 200. Время работы скрипта на моей машине — около минуты. Пока напрягает не сильно, но по мере увеличения сервиса нужно будет думать над оптимизацией (сейчас, по всей видимости, долго думает из-за большого числа связей между таблицами). А вот для сравнения: прогон тех же 200 запросов по таблице топиков, скачанных с ЖЖ, занял всего около 7 секунд. Но там всего одна таблица, в которой около 70 записей. В-общем, эксперименты продолжаются.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 11: ↑7 and ↓4+3
Comments2

Articles