8.3.07

Ferret

Na verdade um port para código nativo da ferramenta Apache Lucene, o Ferret é uma engine de texto ("full text search") rápida e com suporte a uma sintaxe bastante rica de indexação e busca. O suporte a Rails (através do plugin acts_as_ferret) é tão simples que dá até medo: vamos supor um sistema hipotético de (surpresa!) blogging. Depois de longos 5 minutos de desenvolvimento, eu já tenho meu modelo de Post:

class Post < ActiveRecords::Base
attr_accessor :text, :user, :title, :creation_date
end

Para utilizar o Ferret, é preciso primeiramente instalar o gem da engine:

gem install ferret

Após concluído o processo de instalação, precisamos também do plugin, em nosso projeto:

ruby script/plugin install svn://projects.jkraemer.net/acts_as_ferret/tags/stable/acts_as_ferret

Muito bom, muito bonito. Agora vamos à difícil tarefa de implementar o suporte a busca full text nos meus posts. Que rufem os tambores...

class Post < ActiveRecords::Base
acts_as_ferret
attr_accessor :text, :user, :title, :creation_date
end

E-pronto. Sempre que precisar fazer uma busca utilizando texto em qualquer dos campos do Post, basta utilizar-se o método find_by_contents(), definido pelo acts_as_ferret:

def buscar_comida
comida = Post.find_by_contents("torta OR bolo OR bigmac OR pizza")
end

A sintaxe utilizada para as buscas é a mesma do Lucene, que permite utilizar agrupamentos lógicos de palavras, busca por proximidade, similaridade...

Tão fácil que deu até medo.

3 comentários:

Unknown disse...

Simples rápido e direto ao ponto! :D Posta mais! Posta mais!

Anônimo disse...

Gostei da dica!

Paulo Cassiano disse...

Phoda!

I became so numb with Ruby...

Forte abraço,