Новости | Freedomist Books Bot 📚 | Torrents Index Bot 🔎
Это часть свободного интернета. © Freedomist
11-03-2024
UPD: справедливо на момент написания, спустя пару лет всё стало немного сложнее.
Ищут пожарные, ищет милиция,
Ищут фотографы в нашей столице,
Ищут давно, но не могут найти
Парня какого-то лет двадцати.
Самуил Маршак
До вайпа на пикабу там был пост, раскрывающий детали устройства поиска раздач в боте. В любом случае информация, которая там была, уже серьёзно устарела. В этом посте я постараюсь описать работу поиска на сайте и в ботах, объяснить отличия от некоторых современных систем, а также дам рекомендации, как правильно использовать тот поиск, что имеем.
В отличие от Telegram-бота, на сайте поиск представляет собой упрощенную реализацию, и лишен многих опций, которые вам доступны в боте. Кстати, все возможности бота поиска торрентов описаны в достаточно длинном (но не достаточно подробном) руководстве. Я крайне рекомендую прочитать его полностью (хотя бы оглавление), если вы этого ещё не делали. Так вы будете представлять, какими возможностями на данный момент обладает проект. А ещё ответы на вопросы "почему бы не взять эластик/solr/что-то ещё".
Однако, несмотря на различия в возможностях фильтрации, выбора периода актуальности раздач и остального, и там и там поиск обладает сходными специфическими особенностями. Для того, чтобы их объяснить, я немного расскажу о том, как устроена вообще поисковая система.
Для того, чтобы что-то найти, мы пишем поисковый запрос. В таких популярных современных поисковых системах, как Google или Yandex, запросы для успешного поиска могут быть сформулированы самым разным образом. Например, "скачать гарри поттера в высоком качестве бесплатно". Эти системы обладают высоким уровнем интеллекта для распознавания семантики запроса (как бы понимают вас, то что вы имели ввиду). Для этого у них существуют довольно продвинутые языковые модели (мощные сложные программы анализа и синтеза естественного языка).
Так мы приходим к первому отличию от многих поисковых систем, которые нас сегодня окружают:
1. В моем проекте не используются (пока что?) продвинутые системы анализа естественного языка.
Поэтому многие попытки найти что-то похожим образом могут потерпеть неудачу. Например, вышеуказанный запрос про Гарри Поттера будет наполнен избыточными словами, которые не будут поняты.
В базовом виде (а именно таким можно считать мою реализацию) поисковая система хранит слова, которые соответствуют документам (страницам, раздачам), и связи: какие слова каким документам соответствуют. И когда вы отправляете поисковый запрос, первое что происходит — разбиение запроса на те самые слова. Ну а далее — поиск тех страниц (документов), в которых эти слова встречаются. Вот, в общем-то, и всё, но вокруг этого есть ещё произвольное количество юансов.
Начнём с того, что теми самыми документами/страницами в нашем случае являются страницы с трекеров, содержащие magnet-ссылки и раздачи с .torrent-файлами. Их мы и будем, что называется, "индексировать": разбивать на слова и помещать в базу данных, где хранятся связи.
На странице с раздачей, как вы понимаете, может быть всё что угодно, в том числе нежелательный мусор. Понять, что включить в индекс с этой страницы, не всегда просто. Для простоты ограничимся названием (title) страницы с раздачей (обычно она вполне себе адекватно описывает содержимое), а также (так как обычно торрент-трекеры представляют собой форумы) раздел форума (его название), в котором находится данная раздача. Эти две сущности и будем индексировать, а на остальное пока забьём. Остальное может быть тоже важным и нужны, но пока что всё устроено именно так.
Теперь понятно, что по запросу скачать гарри поттера в высоком качестве бесплатно может
легко не оказаться в нужном документе (страницы с раздачей фильма из серии «Гарри Потер») слов
скачать (потому что на трекерах всё, для того, чтобы скачать, это слово не принесло
бы информации), бесплатно, а также часть в высоком качестве скорее всего
слишком абстрактна. В каком именно качестве? Обычно пишут конкретный формат или битрейт, или иные
параметры (HD, mp3, flac и подобное). Таким образом, из-за того,
что много слов из-за запроса не подошло к казалось бы подходящей раздаче с названием Гарри Потер и
узник Азкабана UHD 4K AVI, она не будет отображаться в результатах поиска.
Системы с высоким уровнем анализа естественного языка могут распознавать слова, не несущие
нагрузки ключевых для поиска, а контекстно-описательных (те самые бесплатно и
скачать), и соответствующим образом преобразовывать ваш поисковый запрос. Поэтому
там так искать можно, а здесь — нежелательно. Указывайте минимально необходимую
точную информацию в поисковом запросе.
2. Лемматизация — используется (частично).
Однако для сносного поиска ещё недостаточно просто положить все слова «как есть» в индекс. Их
по-хорошему надо привести к одному регистру (чтобы не возникало трудностей с разделением/опознанием в
запросах Гарри Поттер, гарри поттер или даже ГаРрИ ПоТтЕр. Для нас это всё одно и
тоже: гарри поттер (нижний регистр).
Кроме одного регистра, у нас есть разные словоформы. Наверное, неплохо бы учитывать, что
аудиокниги и аудиокнига это тоже одно и то же: аудиокнига.
Подобные приведения всех слов к нормальной словоформе для индексации называется «лемматизация». И она
таки есть в поисковой системе проекта. Но в строго определенном месте.
Если все погружаемые в индекс слова приводить к нормальной словоформе, мы получим, что запросы
черная весна и черные, весна возвращают нам один и тот же список раздач.
Стремясь поддержать точность поиска, лемматизации подвергаются только слова из названия форумов
(категории). Те самые аудиокниги, фильмы, сериалы. Поэтому не
будет ошибкой уточнять в запросе гарри потер аудиокнига, ведь есть такие разделы на форумах
с аудиокнигами, и их названия содержат аудиокниги.
Таким образом было существенно повышено качество поиска и «процент попаданий» (успешных запросов), когда
люди ищут к примеру гарри потер сериал.
3. Точность, точные и неточные совпадения.
В той самой базовой модели мы имеем дело с набором слов из документа (страницы), их порядок нам не
важен. Так бывает далеко не всегда, и в боте есть способ (написав в начале сообщения /s)
заставить искать с учётом порядка слов. На сайте такой опции пока что нет.
Другой смысл этого понятия — сколько слов из запроса подошло к индексу раздачи. Хорошо, если все. Тогда мы считаем, что совпадение с запросом полное. Иначе вы в боте увидите строку «осторожно, неточное совпадение». Это означает, что были найдены только такие раздачи, которые лишь частично подходят к запросу. На сайте вы не увидите такого предупреждения, зато увидите некоторые баги (мы работаем над этим).
4. INVALID HASH, ошибка, ошибка, неверная ссылка
В случае успеха поисковая система отдаёт вам список ссылок для просмотра более подобной информации о раздаче и получения собственно magnet-ссылкок (чтобы скачать). Надо помнить только, что живут эти самые ссылки из поиска в боте, из API и на сайте довольно ограниченное время и являются одноразовыми. При повторном нажатии/обновлении, или спустя продолжительное время, вы будете получать странные сообщения.
которые следуют из вышеописанного:
скачать,
бесплатно, найти (если это не часть названия).
сериал,
аудиокнига и подобные.
Я постарался не вдаваться в конкретные технические подробности реализации, цель данного материала — дать базовое представление о том, почему всё работает именно так, как работает. Периодически задают вопросы, а почему бы не использовать какую-нибудь систему полнотекстового поиска типа Elasticsearch или Solr, или ещё что-то такое. Отвечаю:
Best regards,
Captain Freedomist.