Corrigindo a busca do Discourse

Estou criando um plugin que armazena alguns dados adicionais para cada usuário (semelhante ao discourse-user-notes, mas não restrito apenas à equipe) e gostaria de poder pesquisar nesses dados.

Provavelmente, isso envolve fazer um patch em algo dentro de lib/search.rb. Sei que o plugin de busca Algolia substitui o que aparece na janela pop-up da caixa de pesquisa, mas idealmente, gostaria que isso também afetasse a página de resultados em si.

Alguém tem sugestões sobre por onde começar?

Você pode estender a busca a partir do seu plugin; por exemplo, você pode adicionar um filtro avançado assim:

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

O exemplo acima exibirá apenas posts que contêm vídeos quando a caixa de busca incluir a palavra-chave with:video. Consulte também o filtro avançado de emblemas para um exemplo de consulta de busca que leva em conta dados do usuário.

Legal. Adicionar um filtro avançado significa que esses resultados também aparecerão em uma pesquisa geral (sem filtro avançado)?

Sim, você pode usar uma palavra-chave avançada tanto na janela de pesquisa quanto na pesquisa de página inteira.

Não precisamos mais manter essa proteção; essa API está em vigor há bastante tempo.

Sobre o assunto, o PluginStore escalará bem aqui? Imagino que isso levará a muitas varreduras completas (na ausência de um índice amigável a LIKE nas chaves), então seria melhor criar uma tabela 1-1 para os dados extras do usuário?

Evite o PluginStore; implemente tabelas para o seu plugin.