¿El mejor algoritmo / práctica al crear un mecanismo de búsqueda para su base de datos? [cerrado]

7

He estado diseñando una base de datos donde es muy importante proporcionar a los usuarios un buen mecanismo de búsqueda. ¿Entonces me preguntaba cuáles son algunas de las mejores prácticas para usar palabras clave para buscar en múltiples tablas de bases de datos y devolver los registros relevantes?

Algunas otras cosas de las que tengo curiosidad:

  • La ubicación de los usuarios, si proporcionan una dirección
  • La velocidad del algoritmo

Información adicional: Estoy usando C # y LINQ-to-SQL.

    
pregunta Alex Hope O'Connor 19.07.2011 - 12:47

4 respuestas

10

Hay básicamente tres opciones (además de usar declaraciones "LIKE" ingenuas):

  • Búsqueda de texto completo, si su base de datos lo permite
  • Sphinx, Lucene y opciones similares
  • API y búsqueda personalizada de Google / Yahoo / Bing, si corresponde

Mi propia preferencia se dirige a la búsqueda de texto completo (es bastante bueno y altamente configurable en Postgres). Muchos desarrolladores prefieren Sphinx o Lucene: nunca he encontrado la necesidad de usar ninguno, pero vea esta publicación para obtener una segunda opinión.

Para la ubicación del usuario, algún tipo de infraestructura GIS (por ejemplo, PostGIS en Postgres) es útil si planea extraer información relevante de manera oportuna (por ejemplo, recopilar estadísticas de usuarios en un área o región determinada). No estoy lo suficientemente familiarizado con Sphinx y Lucene para saber lo que los dos últimos tienen para ofrecer en este frente.

    
respondido por el Denis de Bernardy 19.07.2011 - 13:10
2

Depende de la situación y de lo que intenta buscar. Recuerdo que implementamos una solución de búsqueda para un cliente mediante la creación de una vista de base de datos que concatenó varios campos de diferentes tablas en un campo y ejecutamos nuestra búsqueda en esa vista.

    
respondido por el Michael Riley - AKA Gunny 19.07.2011 - 14:54
1

Si bien todo lo anterior es importante, lo más importante en relación con el suministro de un buen mecanismo / experiencia de búsqueda es el rendimiento de la base de datos (y quizás la interfaz gráfica de usuario).

En cuanto al rendimiento de la base de datos, debe asegurarse de que las columnas de búsqueda estén correctamente indexadas, que las estadísticas estén actualizadas, que su SQL esté utilizando los planes de consulta actuales y que su base de datos tenga suficiente memoria y una CPU decente.

En cuanto a la presentación de resultados de búsqueda, debe asegurarse de que los resultados se muestren de manera oportuna. No tiene sentido que la base de datos devuelva los resultados en < 1 segundo, pero el gui está demorando 2 minutos en mostrarlos. Debe asegurarse de que el código de visualización esté optimizado y que sea compatible con la paginación.

    
respondido por el armitage 19.07.2011 - 17:32
0

Para obtener una mejor búsqueda, se pueden implementar las siguientes soluciones:

  • Hacer la indexación correcta de la columna dependiendo de la búsqueda condiciones También tenga en cuenta que el número de índices debe ser óptimo, de lo contrario, sobrecargará la base de datos.
  • Defina las claves primarias para la columna en la tabla.
  • Si la búsqueda es demasiado frecuente, intente definir la opción de búsqueda de texto completo al momento de crear la base de datos.
respondido por el Mukesh Sagar 06.11.2013 - 13:35

Lea otras preguntas en las etiquetas