Permíteme aclarar esta afirmación. Para las coincidencias exactas, no es necesario clasificar los resultados, ya que o hay una coincidencia o no la hay. Para las coincidencias parciales, ¿cómo decidiremos cuáles deben aparecer primero?
- Este es mi término de búsqueda
- Término de búsqueda es interesante
- Término de búsqueda es más interesante aquí, ya que el título es más largo
Todos los títulos anteriores contienen el término de búsqueda, por lo que la pregunta es: ¿cómo clasificamos los resultados? Actualmente, confiamos en la función de clasificación de Postgres para determinar esto por nosotros.
La clasificación intenta medir qué tan relevantes son los documentos para una consulta específica, de modo que cuando haya muchas coincidencias, las más relevantes se muestren primero. PostgreSQL proporciona dos funciones de clasificación predefinidas, que tienen en cuenta información léxica, de proximidad y estructural; es decir, consideran con qué frecuencia aparecen los términos de la consulta en el documento, qué tan cerca están entre sí en el documento y qué tan importante es la parte del documento donde ocurren. Sin embargo, el concepto de relevancia es vago y muy específico de la aplicación. Diferentes aplicaciones podrían requerir información adicional para la clasificación, por ejemplo, la fecha de modificación del documento. Las funciones de clasificación integradas son solo ejemplos. Puedes escribir tus propias funciones de clasificación y/o combinar sus resultados con factores adicionales para adaptarlos a tus necesidades específicas.
Hay una serie de factores que Postgres tiene en cuenta, pero en última instancia, la clasificación sigue siendo algo vaga y realmente depende de sitio a sitio, según cómo esté estructurado el contenido del foro. Nuestro objetivo aquí en Discourse es ofrecer una buena opción predeterminada que funcione para la mayoría de los foros existentes.