6 puntos por GN⁺ 2023-07-13 | 1 comentarios | Compartir por WhatsApp
  • PostgreSQL ofrece los componentes necesarios para construir su propio motor de búsqueda
  • Los componentes principales son los tipos de datos tsvector y tsquery, el operador de coincidencia @@, las funciones de ranking de resultados y el tipo de índice GIN
  • tsvector almacena vocabulario normalizado y sus posiciones en el texto original
  • tsquery representa una consulta normalizada y puede combinar varios términos usando operadores lógicos
  • El tipo de índice GIN se usa para consultas eficientes sobre tsvector
  • ts_rank y ts_rank_cd son funciones de ranking que consideran la frecuencia de los términos y su proximidad
  • Ajustando la relevancia, se pueden personalizar los resultados de búsqueda según criterios específicos
  • Se pueden agregar boosters de números, fechas y valores exactos a la puntuación de ranking
  • Se pueden asignar pesos a columnas para priorizar ciertos términos en los resultados de búsqueda
  • Usar setweight en la columna del título mejora el ranking de los títulos de películas que incluyen la palabra "jedi"
  • PostgreSQL no soporta directamente la búsqueda difusa ni la tolerancia a errores tipográficos, pero puede implementarse usando similitud o distancia de Levenshtein
  • La búsqueda facetada, que ayuda a los usuarios a acotar el alcance de la búsqueda, puede implementarse en PostgreSQL usando definiciones de categorías o algoritmos
  • El artículo cierra mencionando que en la segunda parte se hará una comparación detallada con Elasticsearch

1 comentarios

 
GN⁺ 2023-07-13
Comentarios en Hacker News
  • Hay expectativa por la segunda parte que compara PostgreSQL y Elasticsearch.
  • Subestimé el esfuerzo de sincronizar PostgreSQL y Elasticsearch para CRUD y búsqueda.
  • Los motores de búsqueda necesitan velocidad de búsqueda rápida. Esto no solo importa en teoría.
  • Con algoritmos básicos de CS y aprovechando el hardware, se pueden crear fácilmente bases de datos y motores de búsqueda básicos.
  • La naturaleza subjetiva de la búsqueda es el mayor desafío.
  • Postgres puede combinarse con pgvector para encontrar contenido relevante mediante embeddings.
  • La búsqueda interna de Postgres carga mucho la CPU, y las actualizaciones transaccionales deben tener prioridad.
  • Los clústeres de ES y Solr operan con alto uso de CPU durante la reindexación.
  • Las extensiones de PG para búsqueda, joins recursivos y vectores son divertidas y sencillas para proyectos paralelos.
  • SQLite también ofrece indexación avanzada y funciones de stemming.
  • Se abstrae la lógica de negocio en la base de datos, pero no se mencionan los trade-offs.
  • Estoy considerando ejecutar un motor de búsqueda personalizado para ciertos sitios guardados en marcadores.
  • Hay curiosidad sobre si conviene elegir Postgres/Elasticsearch o una solución comercial.
  • La palabra "avanzado" se considera un indicador positivo.