Исправление поиска в Discourse

Я пишу плагин, который хранит дополнительные данные для каждого пользователя (похожий на 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. См. также расширенный фильтр для бейджей в качестве примера поискового запроса, учитывающего данные пользователя.

Отлично. Означает ли добавление расширенного фильтра, что эти результаты также будут отображаться при обычном поиске (без использования расширенного фильтра)?

Да, вы можете использовать расширенный ключевой запрос как во всплывающем окне поиска, так и в полном поиске по странице.

Нам больше не нужно поддерживать эту защиту, так как этот API существует уже очень давно.

Кстати, хорошо ли будет масштабироваться PluginStore в данном случае? Я предполагаю, что это приведет к множеству полных сканирований (при отсутствии индекса, совместимого с LIKE, по ключам), поэтому не лучше ли создать таблицу с отношением один-к-одному для дополнительных данных пользователя?

Избегайте PluginStore, создайте таблицы для вашего плагина.