Discourseの検索機能の修正

各ユーザーに追加データを保存するプラグイン(staff 専用ではなく 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 検索に優しいインデックスがない場合、フルスキャンが多数発生すると思うのですが、追加のユーザーデータ用に 1 対 1 のテーブルを作成する方がよいでしょうか?

PluginStore は避けて、プラグイン用にテーブルを展開してください。