Давным давно в далекой-далекой галактике, когда деревья были большими, а интернет маленьким, никакого засилья поисковых систем не существовало. Они только начали появляться и были достаточно простыми и «тупыми». А значительное развитие получили каталоги, где по темам было разложено какие сайты в этом вашем интернете есть. Зашел в раздел, нашел сайт, наслаждайся.

image

А потом появились AltaVista, Google, Yahoo, Яндекс, Апорт, Rambler и другие. И вот сейчас, вся эта ситуация повторяется с Телеграмом, как мне кажется. Каталоги есть, а поиска почти нет.
Безусловно, в самом Телеграме поиск есть, но работает он только с теми группами, каналами и переписками, которые вы уже к себе добавили. Глобального поиска по группам и каналам нет.
А раз его нет, то почему бы его не сделать, подумал я? Как раз у меня давно уже чесались руки попробовать Elasticsearch, а тут и повод подвернулся.

Идея проста — «присесть» на мощности Телеграма, а не делать свою ферму по парсингу каналов и групп. Для этого мы делаем бота, который просто читает все сообщения в группе и складывает в индекс в Elasticsearch. Ну и потом уже в веб-интерфейсе или через бота мы можем осуществлять поиск по всем группам и каналам, где такой бот стоит.

И вот уже на этапе реализации эта блестящая мысль претерпела некоторые изменения. Как оказалось, добавить в бота в канал можно только в качестве администратора. А администратору нельзя запретить все действия. Получается, чтобы добавить чужого бота к себе в канал, нужно ему хоть что-то разрешить. А там все разрешения довольно чувствительны. Поэтому тут у меня некоторые затруднения. Т.е. понятно, что на вере и личном убеждении договориться можно. И, например, «Изменение профиля канала» не самая страшная привилегия, но начиная с какого-то солидного положения канала, ее тоже давать кому попало тоже уже не захочется. Поэтому тут прошу помощи у сообщества — есть ли возможность как-то обойти эти ограничения?

Хорошо, хоть с группами таких проблем не было!

Бота сделать труда не составило, с elasticsearch разобрался тоже быстро, на все ушло несколько дней. Вот только с морфологическим русским поиском в последней версии Elasticsearch были некоторые проблемы. Пришлось курить мануалы на тему подключения русских hunspell словарей. Индекс получился довольно простым. Учитывается сам текст сообщения, имя канала/группы, ее номер, id сообщения и пользователя. Ну и отдельно сделал индекс, куда складываются запросы к боту, для статистики.

Хотел было рассказать про техническую составляющую работы, но понял, что про написание ботов писали уже с десяток раз, про сам elasticsearch тоже есть немало статей, а у меня нет никаких особенностей использования — просто полнотекстовый поиск. Как из php работать с elasticsearch вроде тоже все просто — поставил из composer и вперед.

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

Но я надеюсь, что телеграм-воротилы будут добавлять бота в свои группы и его база значительно увеличиться. Вот бот @TelegaIndexBot, вот веб-интерфейс tgindex.ru — welcome!

Ну и, естественно, приветствуется критика и прочие пожелания.

p.s. сделал группу для «поиграться». t.me/telegaindex — если в нее добавить текст, он проиндексируется ботом. можно какие-то эксперименты провести.