Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Comparação do mecanismo de pesquisa de texto completo - Lucene, Sphinx, Postgresql, MySQL?


É bom ver que alguém entrou na conversa sobre Lucene - porque eu não tenho ideia sobre isso.

Esfinge, por outro lado, eu sei muito bem, então vamos ver se posso ajudar.
  • A classificação de relevância do resultado é o padrão. Você pode configurar sua própria classificação, se desejar, e atribuir pesos mais altos a campos específicos.
  • A velocidade de indexação é super-rápida, porque se comunica diretamente com o banco de dados. Qualquer lentidão virá de consultas SQL complexas e chaves estrangeiras não indexadas e outros problemas semelhantes. Também nunca notei lentidão na pesquisa.
  • Sou um cara do Rails, então não tenho ideia de como é fácil implementar com o Django. No entanto, existe uma API Python que vem com a fonte Sphinx.
  • O daemon do serviço de pesquisa (searchd) tem pouco uso de memória - e você pode definir limites em quanta memória o processo do indexador também usa.
  • A escalabilidade é onde meu conhecimento é mais superficial - mas é fácil copiar arquivos de índice para várias máquinas e executar vários daemons pesquisados. A impressão geral que recebo de outras pessoas é que é muito bom sob alta carga, portanto, escaloná-lo em várias máquinas não é algo que precisa ser tratado.
  • Não há suporte para 'você quis dizer', etc - embora isso possa ser feito com outras ferramentas com bastante facilidade. Sphinx faz derivar palavras usando dicionários, então 'dirigir' e 'dirigir' (por exemplo) seriam considerados iguais nas pesquisas.
  • O Sphinx não permite atualizações parciais de índice para dados de campo. A abordagem comum para isso é manter um índice delta com todas as alterações recentes e reindexá-lo após cada alteração (e esses novos resultados aparecem em um ou dois segundos). Devido à pequena quantidade de dados, isso pode levar alguns segundos. Você ainda precisará reindexar o conjunto de dados principal regularmente (embora a regularidade dependa da volatilidade de seus dados - todos os dias? a cada hora?). As rápidas velocidades de indexação mantêm tudo isso bastante indolor.

Não tenho ideia de como isso é aplicável à sua situação, mas Evan Weaver comparou algumas das opções comuns de pesquisa do Rails (Sphinx, Ferret (um porte de Lucene para Ruby) e Solr), rodando alguns benchmarks. Pode ser útil, eu acho.

Eu não aprofundei a pesquisa de texto completo do MySQL, mas sei que não compete em velocidade nem em recursos com Sphinx, Lucene ou Solr.