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

StackOverflow https://stackoverflow.com/questions/34314

  •  09-06-2019
  •  | 
  •  

Pregunta

Quiero implementar la función de búsqueda para un sitio web (supongamos que es similar a SO).No quiero utilizar la búsqueda en Google de cosas así.

Mi pregunta es:

¿Cómo implemento esto?

Hay dos métodos que conozco:

  1. Busca en todas las bases de datos de la aplicación cuando el usuario realiza su consulta.
  2. Indexar todos los datos que tengo y almacenarlos en otro lugar y consultar desde allí (como lo que hace Google).

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

Mejor, ¿hay alguna forma mejor de hacer esto?

¿Fue útil?

Solución

Utilice lucena,
http://lucene.apache.org/java/docs/

Apache Lucene es una biblioteca de motor de búsqueda de texto con todas las funciones y alto rendimiento escrita íntegramente 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 módulo Zend Framework.

Lucene hace lo que usted quería (indexación de los elementos buscados), debe realizar un seguimiento de un índice de lucene, pero es mucho mejor que realizar una búsqueda en una base de datos en términos de rendimiento.Por cierto, la búsqueda SO funciona con lucene.:D

Otros consejos

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

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

Si ejecutas un sitio mediano con un motor SQL utilice las funciones de búsqueda de su motor SQL.

Si ejecutas algunos pila de software más pesada como J2EE o .Net uso Lucena, un gran y potente motor de búsqueda o su clon .Net lucene.Net

Si quieres abstrae tu búsqueda de tu aplicación y poder consultarlo en un idioma neutral con API XML/HTTP y JSON, eche un vistazo a Solr.Solr ejecuta lucene en segundo plano, pero le agrega una interfaz web agradable.

Quizás quieras echar un vistazo a xapiano y el omega Interfaz.Es esencialmente un conjunto de herramientas sobre el cual puede crear funciones de búsqueda.

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

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

La desventaja que tiene el enfoque de indexación es el tiempo de respuesta.Existen soluciones alternativas (como el mapa del sitio de Google), pero también es complejo hacerlo bien.

Si opta por la ruta de la base de datos, tenga en cuenta también que los sistemas de motores de búsqueda modernos funcionan mucho mejor si tienen datos de enlaces que procesar, por lo que encontrar un sistema que pueda comprender los enlaces entre "páginas" de la base de datos tendrá un efecto positivo.

Si está en la plataforma Microsoft, puede utilizar el servicio de indexación.Esto se integra muy fácilmente con los sitios web de IIS.

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

¡Haz una búsqueda en Google y encontrarás toneladas!

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

Se pueden encontrar algunos buenos documentos al respecto, por ejemplo aquí.

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

Si su aplicación usa la pila Java EE y está usando Hibernar puedes usar el Marco de brújula mantener un índice de búsqueda de su base de datos.El marco Compass utiliza Lucena bajo el capó.

El único inconveniente es que no puede replicar su índice de búsqueda.Por lo tanto, debe utilizar una base de datos agrupada para contener las tablas de índice o utilizar los mecanismos de almacenamiento de índices basados ​​en cuadrículas más nuevos que se han agregado a Compass Framework 2.x.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top