6 pontos por GN⁺ 2023-07-13 | 1 comentários | Compartilhar no WhatsApp
  • O PostgreSQL oferece os componentes necessários para criar seu próprio mecanismo de busca
  • Os principais componentes são os tipos de dados tsvector e tsquery, o operador de correspondência @@, funções de ranqueamento de resultados e o tipo de índice GIN
  • tsvector armazena o vocabulário normalizado e as posições no texto original
  • tsquery representa uma consulta normalizada e pode combinar vários termos usando operadores lógicos
  • O tipo de índice GIN é usado para consultas eficientes em tsvector
  • ts_rank e ts_rank_cd são funções de ranqueamento que consideram frequência dos termos e proximidade
  • É possível personalizar os resultados de busca por meio de ajustes de relevância com base em critérios específicos
  • Boosters para números, datas e valores exatos podem ser adicionados à pontuação de ranking
  • É possível atribuir pesos às colunas para priorizar certos termos nos resultados de busca
  • Usar setweight na coluna de título melhora o ranking de títulos de filmes que contêm a palavra "jedi"
  • O PostgreSQL não oferece suporte direto a busca difusa ou tolerância a erros de digitação, mas isso pode ser implementado com similaridade ou distância de Levenshtein
  • A busca facetada, que ajuda os usuários a restringirem o escopo da pesquisa, pode ser implementada no PostgreSQL usando definição de categorias ou algoritmos
  • O artigo termina mencionando que uma comparação detalhada com o Elasticsearch será feita na parte 2

1 comentários

 
GN⁺ 2023-07-13
Comentários no Hacker News
  • Expectativa pela parte 2 comparando PostgreSQL e Elasticsearch.
  • Subestimei o esforço de sincronizar PostgreSQL e Elasticsearch para CRUD e busca.
  • Mecanismos de busca precisam de alta velocidade de pesquisa. Isso não é importante apenas na teoria.
  • Com algoritmos básicos de ciência da computação e aproveitamento de hardware, é possível criar facilmente um banco de dados básico e um mecanismo de busca.
  • A natureza subjetiva da busca é o maior desafio.
  • O Postgres pode ser combinado com o pgvector para encontrar conteúdo relevante por meio de embeddings.
  • A busca interna do Postgres gera alta carga de CPU, e atualizações transacionais devem ter prioridade.
  • Clusters de ES e Solr operam com alto uso de CPU durante a reindexação.
  • Extensões do PG para busca, joins recursivos e vetores são divertidas e simples para projetos paralelos.
  • O SQLite também oferece indexação avançada e stemming.
  • A lógica de negócios é abstraída para o banco de dados, mas os trade-offs não foram mencionados.
  • Estou pensando em rodar um mecanismo de busca personalizado para certos sites salvos nos favoritos.
  • Tenho curiosidade sobre a escolha entre Postgres/Elasticsearch e uma solução comercial.
  • A palavra "avançado" é considerada um indicador positivo.