Podemos usar la directiva cypher en los campos de consulta. Así que a nivel de raíz, un ejemplo que podría ser útil es para el índice de texto completo. Aquí podemos crear un índice de texto completo en la base de datos que nos permite realizar búsquedas difusas. Entonces, si buscamos 'graph' pero lo escribimos mal, agregamos esta tilde, esto es lo que hemos visto como un índice, lo hemos visto como un motor de texto. Esto nos permite realizar búsquedas difusas en la base de datos.
Bien, podemos usar eso en un campo de consulta para buscar títulos de libros utilizando este índice de búsqueda de texto completo difuso. Entonces, cuando estamos buscando libros, incluso si los escribimos mal, obtendremos los resultados que estamos buscando. Ahora también podemos usar esto en campos de mutación si tenemos alguna lógica personalizada. No hablamos mucho sobre las mutaciones que son generadas por la biblioteca Neo4j GraphQL. Pero si quieres crear algunas mutaciones específicas además de las generadas para nosotros, podemos hacerlo con directivas cypher. Para los resolutores personalizados, básicamente la forma en que funciona es que agregamos una directiva de ignorar en nuestro esquema que le dice a la biblioteca Neo4j GraphQL que no intentaremos recuperar estos datos como parte de la consulta cypher generada. Básicamente estás diciendo que estamos definiendo un resolutor, somos responsables de recuperar estos datos.
De acuerdo, genial. Aquí está nuestro último ejercicio. Nos quedan unos 12 minutos. Creo que eso debería ser suficiente tiempo. Entonces, lo que vamos a hacer en este ejercicio es usar la consulta de recomendación de artículos del primer ejercicio para agregar un campo similar en el tipo de artículo. Debido a que tuvimos ese problema con el aprovisionamiento de nuestras naranjas, en realidad omitimos la consulta de recomendación de artículos. Eso está bien, lo haremos. Básicamente, lo que queríamos hacer era escribir una consulta cypher que recomendaría artículos similares. Así que haremos eso, y luego tomaremos esa consulta cypher y la agregaremos a un campo similar en el tipo de artículo. Entonces, cuando resolvamos los artículos, podremos ver artículos similares basados en cómo definamos esos temas superpuestos, superposiciones de organizaciones, lo averiguaremos. Pero luego tendremos esa funcionalidad, esa lógica personalizada en nuestra API de GraphQL, y luego deberás actualizar los componentes de React de los artículos para agregar ese campo a nuestra recuperación de datos y mostrar eso al usuario. Entonces, para cada artículo, podrás ver otros artículos similares recomendados.
Entonces, comencemos yendo al navegador de Neo4j, ¿lo tengo abierto aquí? Aquí está. Y este es el news.graph.zone y el nombre de usuario y la contraseña son simplemente newsgraph, todo en minúsculas, newsgraph, newsgraph, algo así. Entonces, ¿cómo escribiríamos una consulta de recomendación? Bueno, comencemos simplemente obteniendo un artículo. Ok, aquí está, estamos diciendo que coincida con los artículos y luego con nos permite simplemente pasar las cosas o podemos hacer agregaciones, limitaciones, filtrado. Entonces vamos a pasar a través de un artículo. Aquí hay un artículo. Y ahora quiero escribir una consulta para encontrar artículos similares. Entonces, si estoy leyendo este artículo, ¿de qué se trata? Células de inmunidad en la médula ósea, algo sobre COVID, ¿de acuerdo? Entonces, ¿cómo encontraría artículos similares? Bueno, una forma sería mirar los temas de este artículo. ¿Cuáles son los temas de este artículo? Hagamos esto un poco más grande. Coronavirus, vacunación, anticuerpos, sistema inmunológico, ciencia, médula ósea. También podríamos mirar la organización, algo de Moderna, algún artículo de NATURE, y luego una foto. La foto no será útil, las fotos son específicas del artículo. Entonces, una forma en que podría definir la similitud sería, bueno, veamos los artículos que tienen un tema similar. Entonces, estás leyendo este artículo sobre médula ósea, ¿hay otros artículos sobre médula ósea? Oh, tal vez estés interesado en este artículo sobre, ¿qué es esto, alguna enfermedad que tenía Colin Powell que estaba en su médula ósea y tenía algo que ver con COVID? Puede que estés interesado en eso. Bueno, tenemos un montón de temas diferentes. Entonces, no queremos recomendar solo uno, queremos encontrar el artículo que tenga el mayor número de temas superpuestos y eso es lo que vamos a recomendar. Entonces, ¿cómo escribiríamos eso? Bueno, se vería algo así, coincidir con a y luego atravesar hacia afuera tiene tema. Este va a ser nuestro nodo de tema aquí. Y luego queremos atravesar hacia afuera a lo largo de la relación de entrada tiene tema hacia nuestros artículos recomendados. Entonces, aquí básicamente seguimos esta travesía desde el artículo que se resuelve hasta un tema, hasta otro artículo que es la recomendación. Pero en realidad es como el campo candidato para las recomendaciones. Esto puede ser un proceso de dos pasos, uno es obtener todos los candidatos para las recomendaciones, que básicamente son todos los artículos con temas superpuestos. Y luego necesitamos calificarlos. Así que vamos a pasar por las recomendaciones y luego vamos a hacer una agregación. Diremos contar estrella como num. ¿Qué está pasando aquí? Cypher tiene una funcionalidad implícita de agrupación incorporada. Si estás familiarizado con SQL y tienes agrupaciones explícitas en SQL, donde puedes hacer agregaciones agrupadas por algún valor, eso es implícito en Cypher. Usamos el comando with, que dijimos que es como un tubo, nos permite hacer agregaciones o limitaciones, ordenar, ese tipo de cosas. Entonces aquí, esto es como decirme un grupo implícito por REC. Para cada uno de estos artículos recomendados, porque vamos a tener un montón de estos, ¿verdad? Como vamos a tener un montón de artículos que tienen uno o más nodos de tema en común. Queremos calificar estos contando, decimos contar estrella, que es el número de caminos que hemos encontrado para el artículo específico. Entonces, esto básicamente cuenta el número de temas superpuestos del artículo, el único artículo que estamos resolviendo aquí, a nuestro artículo recomendado candidato. Ahora num es la puntuación esencialmente para nuestras recomendaciones. Entonces podemos devolver las recomendaciones ordenadas por num en orden descendente y limitarlas a 10. Si ejecutamos eso, obtenemos nuestros 10 artículos recomendados. Si los miramos, como en esta vista de tabla, tenemos células inmunológicas, refuerzos de COVID, variantes de comprensión científica. Estos son todos similares al artículo que estamos resolviendo, que era algo sobre médula ósea y vacunas. Ok, esto se ve bastante bien. Así que copiemos esta parte de nuestra consulta y volvamos a nuestro código aquí. Y voy a ir a mi código de API de GraphQL y en un artículo, voy a agregar, en realidad, hagámoslo como una extensión de tipo. Entonces voy a decir extender tipo artículo. Esta extensión de tipo simplemente facilita la lectura para que no tengamos un montón de campos apretados juntos. Normalmente usarías esto. Si tuviéramos esta parte en otro archivo, podríamos extender los tipos que existen en nuestro esquema. Pero lo voy a hacer aquí por legibilidad.
Comments