Aggiornamento della ricerca di Discourse

Sto scrivendo un plugin che memorizza alcuni dati aggiuntivi per ogni utente (simile a discourse-user-notes, ma non riservato solo allo staff) e vorrei poter cercare in base a questi.

Presumibilmente ciò richiede di apportare delle modifiche a qualcosa in lib/search.rb. So che il plugin di ricerca Algolia sovrascrive ciò che appare nel popup della casella di ricerca, ma idealmente vorrei che questo influisse anche sulla pagina dei risultati effettivi.

Qualcuno ha suggerimenti su da dove iniziare?

Puoi estendere la ricerca dal tuo plugin; ad esempio, puoi aggiungere un filtro avanzato come questo:

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

Quanto sopra mostrerà solo i post che contengono video quando la casella di ricerca include la parola chiave with:video. Consulta anche il filtro avanzato per i badge per un esempio di query di ricerca che tiene conto dei dati dell’utente.

Bene. Aggiungere un filtro avanzato significa che questi risultati appariranno anche in una ricerca generale (senza filtro avanzato)?

Sì, puoi utilizzare una parola chiave avanzata sia nella finestra di ricerca che nella ricerca a pagina intera.

Non abbiamo più davvero bisogno di mantenere questa protezione, quella API è in vigore da molto tempo.

A questo proposito, PluginStore scalerà bene in questo contesto? Immagino che ciò porterà a molti scansioni complete (in assenza di un indice compatibile con LIKE sulle chiavi), quindi sarebbe meglio creare una tabella 1-a-1 per i dati utente aggiuntivi?

Evita PluginStore, crea tabelle per il tuo plugin.