Я пишу плагин, который хранит дополнительные данные для каждого пользователя (похожий на discourse-user-notes, но не только для сотрудников), и хотел бы иметь возможность выполнять по ним поиск.
Предположительно, это требует внесения изменений в lib/search.rb. Я знаю, что плагин поиска Algolia переопределяет то, что отображается во всплывающем окне поисковой строки, но в идеале я хотел бы, чтобы это влияло и на страницу с результатами поиска.
Вы можете расширить поиск из своего плагина; например, можно добавить расширенный фильтр следующим образом:
require_dependency 'search'
if Search.respond_to? :advanced_filter
Search.advanced_filter(/with:video/) do |posts|
posts.where("posts.cooked LIKE '%<video %'")
end
end
Приведённый выше код будет отображать только те посты, которые содержат видео, если в поле поиска указано ключевое слово with:video. См. также расширенный фильтр для бейджей в качестве примера поискового запроса, учитывающего данные пользователя.
Отлично. Означает ли добавление расширенного фильтра, что эти результаты также будут отображаться при обычном поиске (без использования расширенного фильтра)?
Кстати, хорошо ли будет масштабироваться PluginStore в данном случае? Я предполагаю, что это приведет к множеству полных сканирований (при отсутствии индекса, совместимого с LIKE, по ключам), поэтому не лучше ли создать таблицу с отношением один-к-одному для дополнительных данных пользователя?