Недавно мы начали двухмесячный эксперимент по прототипированию нового опыта поиска в Discourse.
Попробуйте его здесь: https://meta.discourse.org/instant-search
Если вы хотите обсудить свой опыт, не стесняйтесь записаться на звонок. Будем благодарны за любые отзывы
Возможности
-
Быстрый поиск
-
Возможность искать по темам, сообщениям, чатам и пользователям
- Результаты поиска по сообщениям и темам включают личные сообщения (PM)
- Результаты поиска по сообщениям чата включают приватные каналы и личные сообщения (DM)
-
Фильтры на основе интерфейса для тегов, категорий, пользователей, входящих, каналов и т. д.
-
Режимы поиска: по ключевым словам, семантический, гибридный и Hyde
Часто задаваемые вопросы (FAQ)
Поиск перестает работать через некоторое время на странице
Действительно, так и есть; пожалуйста, обновите страницу.
Не поддерживается наша грамматика поиска, например @user или #category
Действительно, не поддерживается, но это легко добавить, если мы решим выпустить эту функцию.
Разделение целей поиска по темам и сообщениям — странное решение
Я понимаю, почему это может показаться странным, особенно если вы привыкли к тому, как работает поиск в Discourse на протяжении последнего десятилетия. Если мы решим выпустить эту функцию, мы могли бы создать режим, который выполняет оба поиска одновременно, или даже просто запускать оба и отображать результаты в интерфейсе. В рамках ограничений этого эксперимента это был самый простой способ охватить оба сценария использования:
- Я знаю, что эта тема существует, и хочу просто найти её (поиск по темам)
- Я хочу найти любое упоминание этого запроса (поиск по сообщениям)
Качество результатов пока не на высоте
Мы едва коснулись того, что здесь возможно; на данный момент мы лишь приоритезируем категории и назначаем веса заголовкам и телу сообщений. Это потребует дальнейшей доработки, чтобы соответствовать уровню точности текущего поиска, но также открывает возможности для дальнейшего улучшения. К сожалению, многое контролируется через JS API, и используемая нами библиотека значительно ограничивала нас в этом.
Семантический / HyDE / гибридный поиск работает медленно
Мы увеличили задержку (debounce) для этих режимов, чтобы обойти некоторые неудобства, связанные с используемой нами JS-библиотекой. Если мы решим выпустить эту функцию, эта библиотека будет первой кандидатом на удаление. Что касается общей скорости, то она зависит от двух запросов: первый — для получения эмбеддингов, который выполняется на устаревшем оборудовании в AWS, что не помогает. Мы также могли бы внедрить эмбеддинги на уровне прокси-мидлвэра, чтобы сократить задержку. Опять же, ограничения времени эксперимента.
Технические детали
-
Этот эксперимент использует Typesense — открытый аналог Algolia. Он работает на экземпляре EC2 в том же месте, где и всё остальное на хостинге Meta.
-
Фронтенд не обращается к Typesense напрямую; вместо этого все вызовы проксируются через приложение Discourse с использованием Rack-мидлвэра.
-
Панель поиска, результаты и уточнения используют InstantSearchJS, обернутый в EmberJS. К сожалению, эта библиотека доставила много проблем, и мы не будем использовать её, если выпустим эту функцию.
-
Сервер использует 7,35 ГБ ОЗУ для индексации всего Meta. Имейте в виду, что большая часть этого объёма связана с эмбеддингами; без них потребление составило бы менее 2 ГБ.




