Patching von Discourse-Suche

Ich schreibe ein Plugin, das zusätzliche Daten zu jedem Benutzer speichert (ähnlich wie discourse-user-notes, aber nicht nur für Mitarbeiter), und möchte danach suchen können.

Vermutlich erfordert dies das Patchen von etwas in lib/search.rb. Mir ist bewusst, dass das Algolia-Suchplugin das im Suchfeld Popup Angezeigte überschreibt, aber idealerweise möchte ich, dass dies auch die eigentliche Ergebnisseite beeinflusst.

Hat jemand Vorschläge, wo ich anfangen soll?

Sie können die Suche in Ihrem Plugin erweitern. Sie könnten beispielsweise einen erweiterten Filter wie folgt hinzufügen:

  require_dependency 'search'
  if Search.respond_to? :advanced_filter
    Search.advanced_filter(/with:video/) do |posts|
      posts.where("posts.cooked LIKE '%<video %'")
    end
  end

Dadurch werden nur Beiträge mit Videos angezeigt, wenn das Suchfeld das Schlüsselwort with:video enthält. Siehe auch den erweiterten Filter für Abzeichen als Beispiel für eine Suchabfrage, die Benutzerdaten berücksichtigt.

Schön. Bedeutet das Hinzufügen eines erweiterten Filters, dass diese Ergebnisse auch in einer allgemeinen Suche (ohne erweiterten Filter) angezeigt werden?

Ja, Sie können ein erweitertes Keyword sowohl im Suchpopup als auch in der Vollbildsuche verwenden.

Wir müssen diesen Schutz nicht mehr mitführen; diese API ist bereits seit sehr langer Zeit vorhanden.

Zu diesem Thema: Wird PluginStore hier gut skalieren? Ich stelle mir vor, dass dies zu vielen vollständigen Scans führen wird (da es keinen LIKE-freundlichen Index für Schlüssel gibt). Wäre es daher besser, eine 1-zu-1-Tabelle für die zusätzlichen Benutzerdaten zu erstellen?

PluginStore ist zu vermeiden; rollen Sie Tabellen für Ihr Plugin aus.