¿Cómo implemento la funcionalidad de búsqueda en un sitio web?

Deseo implementar la funcionalidad de búsqueda para un sitio web (supongamos que es similar a SO). No quiero usar la búsqueda de Google de cosas así.

Mi pregunta es:

¿Cómo implemento esto?

Hay dos métodos que conozco:

  1. Busque todas las bases de datos en la aplicación cuando el usuario dé su consulta.
  2. Indexe todos los datos que tengo y guárdelos en otro lugar y consulte desde allí (como lo hace Google).

¿Alguien puede decirme qué camino tomar? ¿Cuáles son los pros y los contras?

Mejor, ¿hay alguna forma mejor de hacer esto?

Use lucene,
http://lucene.apache.org/java/docs/

Apache Lucene es una biblioteca de motor de búsqueda de texto de alto rendimiento y con todas las funciones escritas completamente en Java. Es una tecnología adecuada para casi cualquier aplicación que requiera búsqueda de texto completo, especialmente multiplataforma.

Está disponible en Java y .net. También está disponible en php en forma de un módulo zend framework.

Lucene hace lo que usted quiere (indexación de los artículos buscados), debe hacer un seguimiento de un índice de Lucene, pero es mucho mejor que hacer una búsqueda en la base de datos en términos de rendimiento. Por cierto, la búsqueda SO está alimentada por lucene. :RE

Depende de qué tan completo sea su sitio web y cuánto quiera hacer usted mismo.

Si está ejecutando un sitio web pequeño sin más posibilidades de agregar una búsqueda personalizada, deje que google haga el trabajo (tal vez agregue un mapa del sitio ) y use la búsqueda personalizada de Google .

Si ejecuta un sitio mediano con un motor sql, use las funciones de búsqueda de su motor sql.

Si ejecuta un paquete de software más pesado como J2EE o .Net, use Lucene , un motor de búsqueda excelente y poderoso o su clon .Net lucene.Net

Si desea abstraer su búsqueda de su aplicación y poder consultarla de manera neutral con las API XML / HTTP y JSON, eche un vistazo a solr . Solr ejecuta lucene en segundo plano, pero le agrega una bonita interfaz web.

Es posible que desee echar un vistazo a xapian y la interfaz de omega . Básicamente es un conjunto de herramientas sobre el que puede crear una funcionalidad de búsqueda.

La mejor forma de abordar esto dependerá de cómo construyas tus páginas.

Si con frecuencia se componen de muchos registros diferentes (como imagino que las páginas de desbordamiento de stack son), es probable que el enfoque de indexación dé mejores resultados a menos que dedique mucho trabajo a la reconstrucción efectiva de las páginas en el lado de la base de datos.

La desventaja que tiene con el enfoque de indexación es el tiempo de respuesta. Hay soluciones (como las cosas del mapa del sitio de Google), pero también son complejas para hacerlo bien.

Si va con la ruta de la base de datos, también tenga en cuenta que los sistemas modernos de motor de búsqueda funcionan mucho mejor si tienen datos de enlace para procesar, por lo que encontrar un sistema que pueda entender los enlaces entre ‘páginas’ en la base de datos tendrá un efecto positivo.

Si está en la plataforma de Microsoft, podría usar el servicio de Index Server. Esto se integra muy bien con los sitios web de IIS.

Tiene todas las funciones básicas, como búsqueda de texto completo, clasificación, exportación e incluye ciertos tipos de archivos y también puede agregar su metainformación a través de metatags en las páginas html.

¡Haz un google y encontrarás toneladas!

Esto es algo ortogonal a su pregunta, pero le recomiendo la idea de una búsqueda RESTful. Es decir, para realizar una búsqueda que nunca se ha realizado, el sitio web PUBLICA una consulta a / búsquedas /. Para volver a ejecutar una búsqueda, el sitio web GET / busca / {some id}

Hay algunos buenos documentos que se encuentran con respecto a esto, por ejemplo aquí .

(Dicho esto, me gusta indexar cuando sea posible, aunque es una optimización, y por lo tanto puede ser prematuro).

Si su aplicación utiliza la stack Java EE y está utilizando Hibernate , puede utilizar el Marco Compass para mantener un índice de búsqueda de su base de datos. El marco de la brújula utiliza Lucene bajo el capó.

La única pega es que no puedes replicar tu índice de búsqueda. Por lo tanto, debe usar una base de datos en clúster para mantener las tablas de índice o utilizar los mecanismos de almacenamiento de índices basados ​​en cuadrículas más nuevos que se hayan agregado a Compass Framework 2.x.