Script de búsqueda MYSQL y PHP con lista de palabras y enlaces

Estoy trabajando en un formulario/script de búsqueda para mi sitio web.

Para empezar, cada palabra utilizada en el contenido de mi sitio web se almacena en una tabla MYSQL llamada words y se ve algo como esto:

id |  word | title_count | content_count | article_count | photo_count | video_count |
---+-------+-------------+---------------+---------------+-------------+-------------+
 1 | hello |           3 |             1 |             0 |           1 |           0 |
 2 |  what |           1 |             4 |             1 |           0 |           0 |

El word y id los campos son ÚNICOS, los campos title_count y content_count se utilizan para almacenar cuántas veces se usó la palabra en un título o en un contenido principal. El otro _count solo diga cuántas veces se usó la palabra en un artículo/foto/video.

No estoy seguro de si todos estos campos de conteo serán útiles para una función de búsqueda, pero pensé que tal vez podría ser útil.

Luego tengo múltiples tablas de enlace a todos los _count campos de la words tabla que se ve así:

id |  word_id | 
---+----------+
43 |        2 |
 7 |        1 |
 7 |        2 |

Estas tablas se llaman: word_link_title, word_link_content, word_link_article, word_link_photo, word_link_video etc. El id El campo almacena la identificación de un artículo/foto/video al que se vincula y el word_id almacena el ID de la palabra vinculada.

Ahora que tengo todo eso configurado, estoy un poco atascado. Realmente no tengo una idea clara de cómo clasificar el contenido relevante en función de todos estos números y los términos de investigación.

Algo que planeo hacer es una página de resultados de búsqueda con múltiples pestañas, una ahí mostraría todos los resultados de la búsqueda y luego en otras pestañas estaría separado en artículos/fotos/videos.

No tengo idea si realmente estoy en el camino correcto para hacer que algo funcione. Espero que alguien pueda ayudarme..

preguntado el 04 de julio de 12 a las 02:07

¿Ha considerado usar la búsqueda de texto completo de mysql? Es esencialmente una versión más avanzada de lo que está tratando de hacer aquí. dev.mysql.com/doc/refman/5.0/en/fulltext-search.html -

@SamDufel No estoy seguro de que eso realmente resuelva el problema aquí. Creo que está buscando cómo unir los metadatos a los activos usando esta tercera tabla que establece una relación de muchos a muchos. Creo que va por el camino correcto. Tal vez simplemente no entiendo cómo sugiere aplicar una búsqueda de texto completo para permitir la búsqueda de resultados categóricos. -

En mi opinión, es mucho más simple agregar un índice de texto completo a cada tabla que desea consultar (artículos, contenido, video, lo que sea). Los resultados se pueden unir/dividir con una unión o con algún php. La ventaja de usar mysql es que ya haya utilizado tiene lógica para enfatizar palabras de uso menos frecuente y viene con una lista estándar de palabras vacías. Básicamente, está reinventando la rueda con un sistema como este y agrega algunos dolores de cabeza serios cuando intenta mantener las tablas de índice de términos de búsqueda manualmente. -

@SamDufel Investigué un poco sobre la búsqueda de texto completo de mysql y es bastante interesante, todavía me gusta mi primera idea de la lista de palabras y los enlaces, pero creo que voy a probar la búsqueda de texto completo. Pero me pregunto si es posible hacer que las palabras del campo del título sean más importantes que las palabras del contenido. Si es posible, ¿cómo hago esto? -

Los resultados de usar MATCH... AGAINST en mysql regresa como un valor numérico: podría, por ejemplo, poner un índice de texto completo separado en los títulos frente a los cuerpos, y multiplicar los resultados de búsqueda del campo de título X 2, dándoles efectivamente el doble del peso de los resultados de la búsqueda corporal. -

1 Respuestas

Todo depende de lo que desee, si desea sugerir resultados, es posible que desee consultar algunos algoritmos de búsqueda de palabras famosos: Jaro Winkler es bueno para palabras cortas y Levenshtein es bueno para palabras cortas en texto largo. También puedes usar PHP similar_text función para una mejor coincidencia después de estos algoritmos anteriores.

Publiqué un montón de scripts de búsqueda aquí (Jaro-Winkler) y aquí cuando construí un proyecto de motor de búsqueda, si quieres comprobarlo.

En cuanto a los diferentes recuentos, ¿por qué no? Puede utilizar el número de apariciones para favorecer algunas palabras clave. ¡Pero tenga cuidado con cuáles inserta en su base de datos! No quieres palabras como 'el' o 'eso' o cualquier otra palabra común que corrompa todo esto.

EDITAR: por supuesto, esto significa que la búsqueda se realizará en PHP y tendrá el gran inconveniente de tener que seleccionar una gran cantidad de palabras clave (si no todas) de la base de datos. Terminé con un tiempo de búsqueda máximo estimado de 0.04 segundos, en una base de datos con más de 3000 palabras. Entonces parece estar bien =)

Respondido 04 Jul 12, 02:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.