Boas dicas!

Eu usei ruby on rails no meu primeiro emprego, tinhamos um CMS pra sites de prefeitura em rails, enquanto os outros sites que faziamos era usando PHP (com um framework próprio).

Incrível como era fácil fazer páginas novas, implementar ideias do cliente e reproduzir as alterações de um projeto em outros com facilidade no rails em comparação com o PHP.

Na época eu não entendia métodos como o pluck pra "arrancar" apenas as colunas de interesse. O fetch é uma sacada muito boa que eu sinto falta em outras linguagens.

Quanto a sua dica para a busca, não entendi como o

must: [
{ match: { name: params[:search] } },
{ match: { category: params[:category] } },
{ match: { price: params[:price] } }
]

vai otimizar o query. Ele ainda realiza um LIKE no banco de dados?

vai ficar assim:

def search
    @products = Product.where("name LIKE '%#{params[:search]}%' OR category LIKE '%#{params[:search]}%'")
    @products = @products.where(category: params[:category]) if params[:category].present?
    @products = @products.where(price: params[:price]) if params[:price].present?
    # ... outras condições de busca ...
end

Gostei muito do post, muito interessante.