Pergunta

Gostaria de fazer uma pesquisa de texto completo de dados em meu aplicativo Ruby on Rails.Que opções existem?

Foi útil?

Solução

Existem várias opções disponíveis e cada uma tem diferentes pontos fortes e fracos.Se você quiser adicionar pesquisa de texto completo, seria prudente investigar cada um um pouco e experimentá-los para ver se funciona bem para você em seu ambiente.

MySQL possui suporte integrado para pesquisa de texto completo.Possui suporte online, o que significa que quando novos registros são adicionados ao banco de dados, eles são automaticamente indexados e estarão disponíveis nos resultados da pesquisa.O documentação tem mais detalhes.

acts_as_tsearch oferece um wrapper para funcionalidade integrada semelhante para versões recentes do PostgreSQL

Para outros bancos de dados você terá que usar outro software.

Lucena é um provedor de pesquisa popular escrito em Java.Você pode usar o Lucene por meio de seu servidor de pesquisa Sol com Rails usando acts_as_solr.

Se você não quiser usar Java, existe uma porta do Lucene para Ruby chamada Furão.O suporte para Rails é adicionado usando o acts_as_ferret plugar.

Xapian é outra boa opção e é suportada no Rails usando o acts_as_xapian plugar.

Finalmente, minha escolha preferida é Esfinge usando o Ultraesfinge plugar.É extremamente rápido e tem muitas opções de como indexar e pesquisar seus bancos de dados, mas não está mais sendo mantido ativamente.

Outro plugin para o Sphinx é Esfinge Pensante que tem muito positivo opinião.É um pouco mais fácil começar a usar o Thinking Sphinx do que o Ultrasphinx.Eu sugeriria investigar os dois plug-ins para determinar qual se adapta melhor ao seu projeto.

Outras dicas

Posso recomendar o Esfinge.Ryan Bates tem um ótimo captura de tela sobre como usar o plugin Thinking Sphinx para criar uma solução de pesquisa de texto completo.

Você pode usar Ferret (que é Lucene escrito em Ruby).Ele se integra perfeitamente ao Rails usando o mixin act_as_ferret.Dê uma olhada em "Como integrar Ferret com Rails".Uma alternativa é Esfinge.

Eu estive compilando um lista das várias opções de pesquisa Ruby on Rails nesta outra pergunta.Não tenho certeza de como ou se combinar nossas perguntas.

Depende de qual banco de dados você está usando.Eu recomendaria usar o Solr, pois oferece muitas opções interessantes.A desvantagem é que você precisa executar um processo separado para isso.Também usei o Ferret, mas achei que ele era menos estável em termos de acesso multithread ao índice.Não experimentei o Sphinx porque ele só funciona com MySQL e Postgres.

Apenas uma observação para referência futura:Ultra Sphinx não está mais sendo mantido.A esfinge pensante é sua substituta.Embora falte vários recursos no momento, como extrair o que o Ultra esfinge tinha, ele compensa em outros recursos.

Eu recomendaria act_as_ferret porque estou usando-o para o projeto Scrumpad no trabalho.A indexação pode ser feita como um processo separado que garante que durante a reindexação ainda possamos usar nosso aplicativo.Isso pode reduzir o tempo de inatividade do site.Além disso, a pesquisa é muito mais rápida.Você pode pesquisar vários modelos ao mesmo tempo e classificar seus resultados pelos campos de sua preferência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top