¿Cómo puedo implementar la funcionalidad de Búsqueda en un sitio web? [cerrado]


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

Mi pregunta es:

¿Cómo puedo implementar esto?

Hay dos métodos que conozco:

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

¿Puede alguien decirme ¿por dónde ir? ¿Cuáles son los pros y los contras?

Mejor, ¿hay alguna mejor manera de hacer esto?

 57
Author: Niyaz, 2008-08-29

7 answers

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

Apache Lucene es una biblioteca de motores 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 módulo de zend framework.

Lucene hace lo que quería (indexación de la búsqueda items), usted tiene que llevar un registro de un índice de lucene, pero es mucho mejor que hacer una búsqueda de base de datos en términos de rendimiento. POR cierto, la búsqueda es impulsada por lucene. : D

 34
Author: paan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 10:16:18

Depende de lo completo que sea su sitio web y de lo mucho que desee 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 medium con un motor sql, utilice las funciones de búsqueda de su motor sql.

Si ejecuta una pila de software más pesada como J2EE o. Net use Lucene , un gran y poderoso motor de búsqueda o su clon. Net lucene.Net

Si desea abstraer su búsqueda desde su aplicación y poder consultarla de manera 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.

 32
Author: Peter Hoffmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 18:02:57

Es posible que desee echar un vistazo a xapian y el omega front end. Es esencialmente un kit de herramientas en el que se puede construir la funcionalidad de búsqueda.

 4
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 10:11:51

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

Si con frecuencia se componen de una gran cantidad de registros diferentes (como me imagino que son las páginas de desbordamiento de pila), el enfoque de indexación es probable que dé mejores resultados a menos que ponga mucho trabajo en 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 vuelta. Hay soluciones (como el sitemap de Google), pero también son complejos de hacer bien.

Si va con la ruta de la base de datos, también tenga en cuenta que los sistemas de motores de búsqueda modernos 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.

 1
Author: Matt Sheppard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 10:16:50

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

Tiene todas las características básicas como búsqueda de texto completo, clasificación, exlcude e incluye ciertos tipos de archivos y puede agregar su propia información meta también a través de etiquetas meta en las páginas html.

Haga un Google y encontrará toneladas!

 1
Author: Johannes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 17:30:59

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

Hay algunos buenos documentos que se pueden encontrar al respecto, por ejemplo aquí.

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

 0
Author: James A. Rosen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 14:59:47

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

El único problema es que no puedes replicar tu índice de búsqueda. Por lo tanto, debe usar una base de datos agrupada para contener las tablas de índices o usar los mecanismos de almacenamiento de índices basados en cuadrícula más nuevos que se han agregado al marco de trabajo Compass 2.x.

 -1
Author: Brian Matthews,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-05 10:00:14