А потом появились AltaVista, Google, Yahoo, Яндекс, Апорт, Rambler и другие. И вот сейчас, вся эта ситуация повторяется с Телеграмом, как мне кажется. Каталоги есть, а поиска почти нет.
Безусловно, в самом Телеграме поиск есть, но работает он только с теми группами, каналами и переписками, которые вы уже к себе добавили. Глобального поиска по группам и каналам нет.
А раз его нет, то почему бы его не сделать, подумал я? Как раз у меня давно уже чесались руки попробовать Elasticsearch, а тут и повод подвернулся.
Идея проста — «присесть» на мощности Телеграма, а не делать свою ферму по парсингу каналов и групп. Для этого мы делаем бота, который просто читает все сообщения в группе и складывает в индекс в Elasticsearch. Ну и потом уже в веб-интерфейсе или через бота мы можем осуществлять поиск по всем группам и каналам, где такой бот стоит.
И вот уже на этапе реализации эта блестящая мысль претерпела некоторые изменения. Как оказалось, добавить в бота в канал можно только в качестве администратора. А администратору нельзя запретить все действия. Получается, чтобы добавить чужого бота к себе в канал, нужно ему хоть что-то разрешить. А там все разрешения довольно чувствительны. Поэтому тут у меня некоторые затруднения. Т.е. понятно, что на вере и личном убеждении договориться можно. И, например, «Изменение профиля канала» не самая страшная привилегия, но начиная с какого-то солидного положения канала, ее тоже давать кому попало тоже уже не захочется. Поэтому тут прошу помощи у сообщества — есть ли возможность как-то обойти эти ограничения?
Хорошо, хоть с группами таких проблем не было!
Бота сделать труда не составило, с elasticsearch разобрался тоже быстро, на все ушло несколько дней. Вот только с морфологическим русским поиском в последней версии Elasticsearch были некоторые проблемы. Пришлось курить мануалы на тему подключения русских hunspell словарей. Индекс получился довольно простым. Учитывается сам текст сообщения, имя канала/группы, ее номер, id сообщения и пользователя. Ну и отдельно сделал индекс, куда складываются запросы к боту, для статистики.
Хотел было рассказать про техническую составляющую работы, но понял, что про написание ботов писали уже с десяток раз, про сам elasticsearch тоже есть немало статей, а у меня нет никаких особенностей использования — просто полнотекстовый поиск. Как из php работать с elasticsearch вроде тоже все просто — поставил из composer и вперед.
В итоге получилась система очень простая, довольно легко масштабируемая и, надеюсь, полезная. Понятно, что сейчас в бота добавлено всего несколько групп и рассчитывать на сколь-либо релевантный поиск не стоит.
Но я надеюсь, что телеграм-воротилы будут добавлять бота в свои группы и его база значительно увеличиться. Вот бот @TelegaIndexBot, вот веб-интерфейс tgindex.ru — welcome!
Ну и, естественно, приветствуется критика и прочие пожелания.
p.s. сделал группу для «поиграться». t.me/telegaindex — если в нее добавить текст, он проиндексируется ботом. можно какие-то эксперименты провести.
denaspireone
Зачем? Лучше оставить все права администратора :D
А как реализовано понятие «значимые»? Алгоритм какой? ;)
Captain Автор
пока что все фразы короче 7 символов отсекаются. но нужно будет настраивать фильтры, когда будет какая-то значимая статистика.
ну и вообще, в поиске я пока профан, надо признать, никак не «настоящий сварщик» :)