Correction de la recherche de Discourse

Je suis en train d’écrire un plugin qui stocke des données supplémentaires pour chaque utilisateur (similaire à discourse-user-notes, mais pas réservé uniquement au personnel), et j’aimerais pouvoir effectuer des recherches sur ces données.

J’imagine que cela implique de modifier quelque chose dans lib/search.rb. Je sais que le plugin de recherche Algolia remplace ce qui apparaît dans la fenêtre contextuelle de la boîte de recherche, mais idéalement, j’aimerais que cela affecte également la page des résultats elle-même.

Auriez-vous des suggestions sur par où commencer ?

Vous pouvez étendre la recherche depuis votre plugin. Par exemple, vous pouvez ajouter un filtre avancé comme ceci :

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

Le code ci-dessus n’affichera que les publications contenant des vidéos lorsque la boîte de recherche inclut le mot-clé with:video. Consultez également le filtre avancé des badges pour un exemple de requête de recherche qui prend en compte les données utilisateur.

Super. L’ajout d’un filtre avancé signifie-t-il que ces résultats apparaîtront également dans une recherche générale (sans filtre avancé) ?

Oui, vous pouvez utiliser un mot-clé avancé dans la fenêtre contextuelle de recherche ainsi que dans la recherche sur toute la page.

Nous n’avons plus vraiment besoin de maintenir cette protection, cette API est en place depuis très longtemps.

Sur ce sujet, PluginStore s’adaptera-t-il bien ici ? J’imagine que cela entraînera de nombreux scans complets (en l’absence d’index compatible LIKE sur les clés), donc ne serait-il pas préférable de créer une table en correspondance 1-1 pour les données utilisateur supplémentaires ?

Évitez PluginStore, déployez des tables pour votre plugin.