Búsqueda en Flat-File CMS

Portfolio Proyecto personal

Búsqueda en Flat-File CMS

Información del proyecto

Proyecto: Búsqueda en Flat-File CMS
Cliente: -
Sector industrial: Proyecto personal
Empresa: -
Ubicación: Múnich
Fecha: julio 2023

Desde que me puse en serio con el Flat Flie System para Pixel Imperfect, sabía que había algo que quizás en un futuro necesitaría pero que por ahora no me había atrevido a desarrollar: un sistema de búsqueda interna.

En principio todo hablaba en su contra: no estaba usando bases de datos, con lo que buscar contenido en una estructura Flat File podría parecer algo complejo. ¿Como iba a buscar las ocurrencias?¿Como podría ordenar los resultados?

Como ya he comentado en otro artículo, para el desarrollo de mi Flat File System utilicé una estructura de objetos PHP alojados en archivos JSON. Por esa razón entendí que si volvía a componer dichos objetos, no sería demasiado complicado buscar contenido en ellos…¿verdad? Así pues me puse manos a la obra.

Contenido relacionado

Pixel Imperfect

Hacía ya mucho tiempo que me apetecía crear un nuevo proyecto personal: libertad total para hacer lo que me apeteciese en cuanto a diseño pero también tenía ganas programar algo nuevo.

Funcionamiento.

Lo primero que hace el sistema cuando se ejecuta una búsqueda es recomponer todo el contenido del sitio web en un único objeto de PHP. Para ello el sistema hace una primera criba desechando los contenidos que han sido seleccionados a través de la administración como no rastreables (borradores, contenido restringido, etc).

El siguiente paso es buscar en cada página y para cada tipo de contenido rastreable (bloques de texto, titulares, pies de imágenes, etc) la cadena integra de búsqueda. Cada vez que hay una ocurrencia se añade en el objeto de la página un nuevo Key cuyo valor es el número de ocurrencias. Seguidamente, en caso de tener una cadena de búsqueda compuesta por más de una palabra, el sistema busca palabra por palabra de nuevo las ocurrencias en cada página creando un nuevo Key. En caso de no haber ninguna coincidencia con la segunda búsqueda (lo cual significa que ningún elemento de la cadena de búsqueda se encuentra en la página en cuestión), el sistema elimina dicha página del objeto. Con ello tenemos un objeto en el que están representadas solamente páginas coincidentes con la búsqueda realizada y además marcadas con las coincidencias existentes.

El último paso es reordenar el objeto en función de las coincidencias encontradas, dando prioridad a las coincidencias con la cadena completa. Así tenemos un objeto en el cual se encuentran los resultados de nuestra búsqueda ordenados por relevancia

Front-end.

Finalmente solo queda mostrar los resultados de la búsqueda. Para ello el sistema toma el objeto PHP generado y construye una página mostrando para cada resultado el título de la página, resumen, imagen principal y su URL. Todo ello ordenado por relevancia.

Next steps.

Dado que el número total de páginas de Pixel Imperfect no es especialmente grande (estamos hablando de menos de 30 páginas por cada idioma) un sistema de filtrado no parece indicado dado no hay contenido suficiente para justificarlo. Por esa razón no he desarrollado ninguno, por ahora. No obstante no descarto en un futuro, o para otros proyectos que utilicen el mismo CMS, desarrollar un sistema de filtrado para los resultados. A fin de cuentas será filtrar y reordenar el Objeto de los resultados en función de distintos parámetros.