tiempo - busqueda inteligente php mysql
¿Cómo implementaría una simple búsqueda de sitios con php y mySQL? (9)
Google Custom Site Search es excelente, si no consultas mucho (creo que obtienes 1k consultas / día gratis) o si estás dispuesto a pagar.
La búsqueda de texto completo de MySQL es también un gran recurso (como se ha mencionado anteriormente).
BOSS de Yahoo es un proyecto intrigante. Voy a probarlo durante mi próximo proyecto de búsqueda.
Y, finalmente, Lucene es un gran recurso si necesita más potencia que el texto completo, pero desea ajustar su propio motor de búsqueda. http://lucene.apache.org
Estoy creando un sitio que permite a los usuarios enviar presupuestos. ¿Cómo podría crear una búsqueda (¿relativamente simple?) Que arroje las comillas más relevantes.
Por ejemplo, si el término de búsqueda fue "turkey", entonces regresaría las comillas donde aparece la palabra "turkey" dos veces antes de las comillas, donde solo aparece una vez.
(Añadiría algunas otras reglas para ayudar a filtrar los resultados irrelevantes, pero mi principal preocupación es esa).
Me gustaría ir con la búsqueda de texto completo, mire aquí: http://hockinson.com/fulltext-search-of-mysql-database-table.html
Si desea escribir uno, eche un vistazo a la implementación de phpBB. Tienen dos tablas, la primera es una lista única de todas las palabras que aparecen en las entradas, y la segunda es una referencia de muchos a muchos entre las palabras y las entradas. Luego puede hacer un grupo y contar para ordenar las entradas de la manera que está buscando.
Es mucho más trabajo que implementar un motor de búsqueda de terceros (o búsqueda de texto completo), pero le permitirá un mayor control sobre los resultados.
planea usar el motor de búsqueda Lucene . Hay un puerto PHP de este escrito para Zend Framework, pero se puede descargar como una entidad separada sin necesidad de toda la hinchazón de ZF. Esto se llama Zend_Search_Lucene, la documentación para la cual se puede encontrar aquí .
Su sql para eso se verá algo así (donde está tratando de encontrar presupuestos con ''pavo''):
SELECT * FROM Quotes
WHERE the_quote LIKE "%turkeyt%";
A partir de ahí, puedes descubrir qué hacer con lo que sea que te escuche.
Tenga cuidado de manejar adecuadamente los casos en que un usuario malintencionado pueda inyectar SQL malicioso en su base de datos, especialmente si está planeando poner esto en www. Si lo haces por diversión, creo que es solo lo que quieres aprender.
Si eres nuevo en bases de datos y sql, recomiendo sqlite sobre mysql. Mucho más fácil de configurar y trabajar, como en ninguna configuración. Te ayudará a evitar los posibles dolores de cabeza de tener que instalar y configurar mysql por primera vez.
Use Google Custom Site Search . He oído que saben una o dos cosas sobre la búsqueda.
Como alternativa a Sphinx y Lucene, se puede crear un motor de búsqueda relativamente simple utilizando la biblioteca de Xapian .
+
Admite muchas características de búsqueda avanzada (como clasificación de relevancia)
+
Rápido
-
Necesitarás aprender la API para crear tu interfaz
-
Requiere una extensión de php para ser instalado
Tenga en cuenta también que Xapian almacena sus datos en un índice separado para mysql.
También podría estar interesado en Forraje que es un envoltorio para Solr, Xapian y Lucene.
Los habitantes de Xapian también crearon el motor de búsqueda Omega, que es una interfaz para Xapian, y se puede llamar a través de cgi.
Me encontré con el motor de búsqueda de zoom hace unos días y creo que este podría ser el motor de búsqueda más simple que he usado.
La herramienta basada en Windows crea una base de datos del sitio, luego también le pregunta qué idioma (PHP, ASP.NET, JavaScript, etc.), desea usar. Escogí PHP y construyó el código PHP para mí. Todo lo que tuve que hacer fue subir los archivos al servidor y (opcionalmente) personalizar la plantilla y la búsqueda del sitio estaba funcionando.
Esto es gratis para sitios pequeños, y el único inconveniente que puedo encontrar es que la herramienta araña (generador de bases de datos) tiene que ejecutarse en Windows.
Todo el mundo está sugiriendo la búsqueda de texto completo de MySQL, sin embargo, debe tener en cuenta una advertencia ENORME. El motor de búsqueda de texto completo solo está disponible para el motor MyISAM (no InnoDB, que es el motor más comúnmente utilizado debido a su integridad referencial y compatibilidad con ACID).
Entonces tienes algunas opciones:
1. El enfoque más simple es delineado por Particle Tree . Puede obtener actaully búsquedas clasificadas de SQL puro (sin texto completo, sin nada). La siguiente consulta SQL buscará una tabla y clasificará los resultados según la cantidad de ocurrencias de una cadena en los campos de búsqueda:
SELECT
SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, ''term'', '''')))/4) +
((LENGTH(p.body) - LENGTH(REPLACE(p.body, ''search'', '''')))/6))
AS Occurrences
FROM
posts AS p
GROUP BY
p.id
ORDER BY
Occurrences DESC
editado su ejemplo para proporcionar un poco más de claridad
Las variaciones en la consulta SQL anterior, añadiendo sentencias WHERE (WHERE p.body LIKE ''% whatever% you% want''), etc. probablemente le proporcionarán exactamente lo que necesita.
2. Puede modificar su esquema de base de datos para que sea compatible con texto completo. A menudo, lo que se hace para mantener la integridad referencial de InnoDB, el cumplimiento de ACID y la velocidad sin tener que instalar complementos como Sphinx Fulltext Search Engine para MySQL es dividir los datos de las cotizaciones en su propia tabla. Básicamente, tendría una tabla Quotes que es una tabla InnoDB que, en lugar de tener su campo de texto "datos", tiene una referencia "quote_data_id" que apunta al ID en una tabla Quote_Data que es una tabla MyISAM. Puede hacer su texto completo en la tabla MyISAM, unirse a los ID devueltos con sus tablas InnoDB y siempre que tenga los resultados.
3. Instalar Sphinx . Buena suerte con este.
Dado lo que describiste, te recomendaría encarecidamente que tomes el primer enfoque que presenté, ya que tienes un sitio basado en una base de datos simple. La primera solución es simple, hace el trabajo rápidamente. Lucene será una perra para configurar especialmente si desea integrarlo con la base de datos ya que Lucene está diseñado principalmente para indexar archivos y no bases de datos. La búsqueda en el sitio personalizado de Google solo hace que su sitio pierda toneladas de reputación (hace que parezca aficionado y hackeado), y el texto completo de MySQL lo más probable es que haga que modifique su esquema de base de datos.