PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Algum motivo para não usar a pesquisa de texto completo do PostgreSQL no Heroku?

Editar, 2016 — Por que não os dois?


Se você está interessado em Postgres vs. Lucene, por que não ambos? Confira o ZomboDB extensão para Postgres, que integra o Elasticsearch como um tipo de índice de primeira classe. Ainda um projeto bastante inicial, mas parece realmente promissor para mim.

(Tecnicamente não disponível no Heroku, mas ainda vale a pena dar uma olhada.)

Divulgação:sou cofundador do Websolr e Bonsai Complementos do Heroku, então minha perspectiva é um pouco tendenciosa em relação ao Lucene.

Minha leitura sobre a pesquisa de texto completo do Postgres é que ela é bastante sólida para casos de uso diretos, mas há várias razões pelas quais o Lucene (e, portanto, o Solr e o ElasticSearch) são superiores em termos de desempenho e funcionalidade.

Para começar, jpountz fornece uma resposta técnica realmente excelente para a pergunta, Por que o Solr é muito mais rápido que o Postgres? Vale a pena algumas leituras para realmente digerir.

Também comentei sobre um episódio recente do RailsCast comparando vantagens e desvantagens relativas da pesquisa de texto completo do Postgres versus Solr. Deixe-me recapitular isso aqui:

Vantagens pragmáticas do Postgres

  • Reutilize um serviço existente que você já está executando em vez de configurar e manter (ou pagar por) outra coisa.
  • Muito superior ao SQL fantasticamente lento LIKE operador.
  • Menos problemas para manter os dados sincronizados, pois estão todos no mesmo banco de dados, sem integração no nível do aplicativo com alguma API de serviço de dados externa.

Vantagens do Solr (ou ElasticSearch)


Em cima da minha cabeça, em nenhuma ordem particular…
  • Escale sua indexação e carga de pesquisa separadamente da carga normal do banco de dados.
  • Análise de termos mais flexível para coisas como normalização de sotaque, radicalização linguística, N-grams, remoção de marcação… Outros recursos interessantes, como verificação ortográfica, extração de "conteúdo avançado" (por exemplo, PDF e Word)…
  • O Solr/Lucene pode fazer tudo na lista TODO de pesquisa de texto completo do Postgres muito bem.
  • Classificação de relevância de termos muito melhor e mais rápida, personalizável com eficiência no momento da pesquisa.
  • Provavelmente desempenho de pesquisa mais rápido para termos comuns ou consultas complicadas.
  • Provavelmente desempenho de indexação mais eficiente do que o Postgres.
  • Melhor tolerância para alterações em seu modelo de dados ao dissociar a indexação de seu armazenamento de dados primário

Claramente, acho que um mecanismo de pesquisa dedicado baseado no Lucene é a melhor opção aqui. Basicamente, você pode pensar no Lucene como o repositório de fato de código aberto de experiência em pesquisa.

Mas se sua única outra opção for LIKE operador, então a pesquisa de texto completo do Postgres é uma vitória definitiva.