Pergunta

Existem várias opções de plugins para construir um mecanismo de busca em sua aplicação Ruby on Rails.Qual destes é o melhor?

Foi útil?

Solução

O Thinking Sphinx possui uma sintaxe mais concisa para definir quais campos e quais modelos são indexados.

Tanto o UltraSphinx quanto o Thinking Sphinx (recentemente) possuem um recurso ultra-legal que leva em consideração a proximidade geográfica dos objetos.

O UltraSphinx tem problemas irritantes com a forma como carrega modelos (ele não carrega a pilha inteira do Rails, então você pode ficar estranho e difícil de diagnosticar erros, que são tratados adicionando explícitos require declarações).

Usamos Thinking Sphinx em novos projetos e UltraSphinx em projetos que usam conteúdo geográfico.

Outras dicas

Esta pergunta já foi feita anteriormente aqui com respostas mais detalhadas.

Uma opção sólida usada por um dos meus amigos é Sol, um mecanismo de pesquisa que usa o Lucene original baseado em Java.Para usá-lo com Rails, é claro que existe um plugin act_as, atua_as_solr.

Ele apresentou o combo recentemente no Montreal sobre trilhos e fornece uma visão geral agradável e completa de como usar act_as_solr em seu blog.

Aparentemente, ele também suporta muito bem sotaques franceses.

Estou passando exatamente por esse processo agora, então, embora não tenha experiência real, passei muitas horas pesquisando todas as opções.Aqui está o que aprendi até agora:

  • *Sphinx - boa reputação em velocidade e funcionalidade, mas o Sphinx precisa de chaves inteiras e meu modelo usa GUID;ThinkingSphinx anunciou recentemente suporte para GeoSpatial
  • Acts_As_Solr – recomendado por um amigo com um site de alto volume;os criadores originais pararam de trabalhar nele e a documentação é difícil de encontrar;requer um servlet Java
  • Acts_As_Ferret - parece fácil de usar, mas muitos detratores dizem que é instável
  • Dois outros com informações limitadas são Acts_As_Indexed e Acts_As_Searchable

Tenho uma planilha com minha tentativa de documentar as vantagens e desvantagens de todos eles.Se alguém estiver interessado em ver e/ou me ajudar a corrigi-lo, basta entrar em contato comigo.Vou publicá-lo em algum lugar assim que souber que está correto.

Minha recomendação seria tentar UltraSphinx ou Thinking Sphinx se você tiver chaves primárias normais.Vou tentar Acts_As_Xapian com base na boa documentação, conjunto de recursos e quão ativo o projeto parece ser.

Usei apenas a combinação Ferret/acts_as_ferret (decisão herdada) em um projeto de cliente.Eu recomendo fortemente que você dê uma olhada no outro opções primeiro.

aaf é muito frágil e pode fazer com que seu aplicativo Rails pare bruscamente se você cometer um erro na configuração ou se por algum motivo você encontrar um bug no aaf.

Nesse caso, em vez de simplesmente prejudicar a funcionalidade de pesquisa, qualquer ação do controlador que toque em um modelo indexado falhará completamente e gerará uma exceção.O que é baaad, ok?

Eu uso o atos_as_xapian plugar.Eu segui este tutorial:

http://locomotivation.com/2008/07/23/simple-ruby-on-rails-full-text-search-using-xapian

Funciona muito bem.

Estou usando atos_as_ferret.É fácil de configurar e geralmente rápido.A funcionalidade integrada de localização de registros ativos é bastante útil:você pode aplicar quaisquer condições ou ingressar em outros modelos depois que sua pesquisa encontrar os registros correspondentes.

Ao contrário do sphinx, você não precisa reindexar TODOS os seus registros ao adicionar novos dados.Existem ganchos after_save e after_update que irão inserir seu novo registro no banco de dados do furão.Este foi um dos grandes argumentos de venda para mim.

Quando você precisa indexar seus dados em massa, o furão é definitivamente mais lento que o act_as_sphinx (por um fator de 3).Acabei escrevendo meu próprio método para reindexar modelos que funciona tão rápido quanto o esfinge - basicamente pré-carrega todos os dados do banco de dados em vez de ir registro por registro para criar o novo índice.

A documentação do furão é boa para o básico, mas é um pouco esparsa quando você faz pesquisas e classificações mais complexas e usa um servidor dRb para hospedar um índice remoto.Dito isto, parece um produto muito mais maduro do que act_as_sphinx, embora eu tenha experiência limitada com esfinge.

Se você estiver usando um serviço de hospedagem compartilhada como o meu (Bluehost), suas opções podem ser limitadas ao que o provedor oferece.No meu caso, não consegui encontrar uma maneira boa e confiável de iniciar e manter um servidor separado em execução, como Lucene ou Solr.

Portanto, optei pelo Xapian e tem funcionado bem para mim.Existem 2 plugins para Rails que pesquisei:atos_as_xapian e xapian_fu.O primeiro irá ajudá-lo a avançar rapidamente, mas parece não ter mais manutenção.Acabei de começar a trabalhar com xapian_fu.

Caso alguém ainda esteja interessado, a última coisa a usar agora é pesquisa elástica.Existem joias disponíveis para isso, como pneu ou trilhos de pesquisa elástica.Também é baseado em Lucene como Solr, baseado em Java.Solr está realmente integrado a este projeto agora...

Usei o Thinking Sphinx e parece muito bom, mas não tive tempo de avaliar todas as opções.

Eu recomendo Pensando Esfinge.É a opção mais rápida na minha opinião.

Usei o Ferret e funcionou bem para meus propósitos, mas não avaliei as outras opções.

Uma opção que não tentei é a baseada em C++ Xapian

Estamos usando http://hyperestraier.sourceforge.net/, que foi herdado.Não procurei outros motores, mas o hyperestraier fornece todos os ganchos necessários.Porém, configurar o índice de pesquisa é complicado.Provavelmente opções mais fáceis disponíveis.

Depende de qual banco de dados você está usando.Eu recomendaria usar o Solr, pois ele oferece muitas opções interessantes para pesquisa difusa e possui um ótimo analisador de consultas.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.

Estou usando uma opção diferente que funcionou incrivelmente bem.Estou usando jruby e conversando diretamente com lucene.

Eu usei act_as_solr no passado e tive alguns problemas.principalmente, ele faz uma chamada síncrona para cada salvamento de AR.Isso não é tão ruim, mas na minha situação, um salvamento às vezes causava muitas chamadas síncronas para solr e ocasionalmente demorava mais do que o mongrel permitiria e eu obtinha uma exceção de tempo limite do mongrel (ou algo parecido)

Thinking Sphinx é uma alternativa melhor que o Ultrasphinx, que parece abandonado, mas, em geral, o Xapian possui um motor mais poderoso que o Sphinx e é mais fácil de implementar pesquisas em tempo real.

Eu recomendo atos_as_ferret.Mas embora a parte difícil seja colocá-lo em funcionamento com sucesso em seu servidor, uma vez feito isso, você dificilmente terá nenhum problema, pois o servidor Ferret estará sendo executado como um processo em segundo plano separado para atualizar seu índice sempre que houver uma nova atualização.Além disso, está funcionando muito bem no mestiço com o Apache para nós.

Também estou procurando a solução perfeita.No começo optei pelo Thinking Sphinx, que funcionou bem.Mas como pretendo hospedar meu webapp em Heroku, a única opção é usar Sol.A maior desvantagem, porém, é que o desenvolvimento dos principais atua_as_solr gem parece ter parado depois de maio de 2008.Então isso é muito antigo para o meu gosto.Acabei de encontrar Mancha solar como uma alternativa avançada e com atualizações recentes, é uma que vou considerar.

Outra opção que o Heroku oferece é optar por um servidor de indexação hospedado baseado em Solr, chamado Websolr.A joia necessária websolr-acts_as_solr felizmente também está muito atualizado.

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