Creación de un motor de “publicaciones relacionadas” mediante la agregación de MongoDB

Pasar a una pila personalizada de Node.js desde WordPress crea muchos desafíos. Uno de ellos es codificar de forma personalizada la función de complementos, como el complemento de publicación relacionada . Es muy fácil hacer eso en WordPress, simplemente agregue un complemento y ya está.

Lea también: Migración de contenido de WordPress a MongoDB

Tuve que personalizar el código de la sección “Publicación relacionada” y en este artículo, explicaré cómo lo logré.

Entonces, ¿qué es una publicación relacionada? Al final de cada artículo, debería ver esto:

Esto muestra que hay más publicaciones relacionadas con el lector que está leyendo en este momento.

No es completamente exacto pero funciona y lo generé siguiendo los siguientes pasos:

Paso 1: etiquetado de datos

Para generar publicaciones basadas en el lector que está viendo actualmente, necesitamos información sobre la publicación, es decir, ¿qué tipo de publicación es esta? ¿Está basado en Nodejs o bases de datos o ambos?

Para lograr esta información necesitamos realizar el etiquetado relativo a cada publicación. Por suerte para mí, WordPress ya tenía categorías y etiquetas como metadatos para cada publicación.

Entonces, cada artículo en mi base de datos MongoDB se ve así:

> db.posts.findOne ();

{


    “_id”: ObjectId (“5d246ef5f45b115cde3009bc”),


    “id”: 6354,


    “title”: “5 cursos gratuitos de programación en Python para principiantes”,


    “date”: “2019-07-08T17: 29: 49”,


    “url “:” https://codeforgeek.com/free-python-programming-courses-for-beginners/ “,


    ” slug “:” cursos-de-programación-en-python-gratuitos-para-principiantes “,


    ” status “:” publicar ” ,


    “tipo”: “publicación”,


    “extracto”: “—————–“,


    “contenido”: “———— —– “,


    ” autor “: 1,


    “







    “tags”: [


        {


            “name”: “python”,


            “slug”: “python”


        },


        {


            “name”: “Tips”,


            “slug”: “tips”


        }


    ],


    “Featured_image”: “— —————- “,


    ” páginas vistas “: 197


}

Observe la categoría y las etiquetas, también almacenamos categorías y etiquetas en una colección separada.

Paso 2: ejecución de la consulta de agregación

La agregación de MongoDB es una canalización de procesamiento de datos donde los documentos ingresan a varias etapas de la canalización y se transforman en un resultado agregado. Para generar un resultado de “Publicación relacionada” para nuestro sitio, también debemos buscar en la colección las publicaciones que coincidan con una o más categorías y etiquetas coincidentes.

Entonces el proceso sería así:

  • Busque en las publicaciones y combínelas con categorías.
  • Pase los datos coincidentes a la siguiente etapa y combínelos con etiquetas.
  • Muestre el resultado en un máximo de cuatro registros.

Aquí hay una consulta de MongoDB en vivo que nuestro sitio usa actualmente:

function getRelatedArticle ( datos , devolución de llamada ) {

    dbo.
colección ( ‘publicaciones’ ) . agregado ( [ {

            $ coincidencia
: {
                “categorías.slug” : {

                    $ in
: datos. categorías
                }
            }
        } ,
        {

            $ coincidencia
: {
                “etiquetas.slug” : {

                    $ in
: datos. etiquetas
                }
            }
        } ,
        {

            $ muestra
: {

                tamaño
: 4
            }
        }
    ] ) . toArray ( ( err , records ) => {
        if ( err ) {
            return callback ( true , ‘error recuperando registros relacionados’ ) ;
        }

        callback
( false , records ) ;
    } ) ;
}

La variable de datos contiene etiquetas y categorías de la publicación actual que está leyendo el usuario. Usamos esas etiquetas y categorías para buscar las publicaciones relacionadas dentro de la colección. Por supuesto, esto no es exacto, pero funciona a partir de ahora.

Además, almacenamos en caché el resultado devuelto en Redis para que no ejecutemos consultas de agregación cada vez que el usuario solicita una página.

También estoy pensando en agregar algunos parámetros más para obtener resultados más precisos, como el filtrado con vistas de página, etc.

Conclusión

La agregación de MongoDB es una herramienta poderosa para lograr resultados complejos al dividir la consulta en varias canalizaciones y combinarlas al final para obtener el resultado. Usamos esto para generar esta función, también puede usar la misma para cualquier propósito que le parezca adecuado.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *