# Grafo de conocimiento El grafo de conocimiento muestra las entidades de sus datos (clientes, pedidos, sedes) y cómo se relacionan. No se copia nada: un **tipo de nodo** es una tabla con una clave, y un **tipo de arista** dice cómo se conectan dos tipos de nodo. Úselo para recorrer lo que rodea a un registro, encontrar el camino más corto entre dos registros, o encontrar registros que son la misma cosa real. En la app, explore el grafo en , en **Grafo de conocimiento**. ## Antes de empezar [#antes-de-empezar] - Las tablas que quiere en el grafo existen y tienen una columna clave. - Todos los ejemplos suponen `nexus = Nexus.connect()`. ## Vea qué hay [#vea-qué-hay] ```python overview = nexus.knowledge_graph.overview() # node types with row counts, and edge types print(overview) print(nexus.knowledge_graph.status()) # when each edge type was last built ``` ## Cambie la definición [#cambie-la-definición] La definición nombra tablas y columnas existentes, y se revisa antes de guardarse. ### Lea, edite y guarde [#lea-edite-y-guarde] ```python from klarety import ConflictError, RefusedError current = nexus.knowledge_graph.definition() definition = current["definition"] # change the node and edge types here try: nexus.knowledge_graph.define(definition, version=current["version"]) except (ConflictError, RefusedError) as refused: print("Not saved. Read the graph again if it changed:", refused) ``` `define()` reemplaza completa su parte de la definición, y se rechaza si el grafo cambió desde que leyó `version`. ### Revísela contra sus datos [#revísela-contra-sus-datos] ```python for result in nexus.knowledge_graph.check("customer", "order"): print(result) ``` `check()` recibe de 1 a 16 nombres de tipo e informa claves faltantes o repetidas y aristas que no apuntan a nada. ## Construya aristas inferidas [#construya-aristas-inferidas] ```python nexus.knowledge_graph.build() # every edge type you may build nexus.knowledge_graph.build("same_customer", rebuild=True) ``` La construcción corre en segundo plano; revise `status()` para saber cuándo termina. Para agregar aristas que ya conoce, envíe hasta 1.000 a la vez; cada una se conserva solo si existen ambas filas: ```python queued = nexus.knowledge_graph.assert_edges("supplies", edges) ``` ## Recorra el grafo [#recorra-el-grafo] ### Parta de un registro [#parta-de-un-registro] ```python keys = nexus.knowledge_graph.nodes("customer", starts_with="ACME") around = nexus.knowledge_graph.around("customer", keys[0], hops=2) for node in around["nodes"]: print(node) ``` `around()` devuelve los nodos a `hops` saltos (como máximo 3), los más cercanos primero. Pase `next_cursor` como `cursor` para la página siguiente. `stopped_at_budget` significa que el recorrido llegó primero al presupuesto de su plan. ### Encuentre un camino [#encuentre-un-camino] ```python paths = nexus.knowledge_graph.path(("customer", "C-1"), ("supplier", "S-9"), hops=4) ``` `path()` devuelve las formas más cortas en que un registro llega a otro, paso a paso, dentro de `hops` (como máximo 4). Queda vacío cuando no hay ninguna. ### Iguales, parecidos y centrales [#iguales-parecidos-y-centrales] ```python nexus.knowledge_graph.same_as("customer", "C-1") # the same real thing nexus.knowledge_graph.similar("product", "embedding", vector) # nearest by a vector column nexus.knowledge_graph.communities() # groups nexus.knowledge_graph.central(node_type="customer") # most connected ``` ## Busque en todo a la vez [#busque-en-todo-a-la-vez] `nexus.search()` ordena en una sola lista los archivos por su nombre y etiquetas, las filas más cercanas a un vector y aquello con lo que se conectan esas filas: ```python for hit in nexus.search("solar panel invoice", limit=10): print(hit) ``` ## Qué puede salir mal [#qué-puede-salir-mal] | Excepción | Causa | Qué hacer | | --- | --- | --- | | `ConflictError` o `RefusedError` en `define()` | La definición cambió desde que la leyó, o nombra algo que no existe. | Léala de nuevo y vuelva a aplicar su cambio, o corrija los nombres. | | `RefusedError` | La definición nombra una tabla o columna que no existe, o no puede llegar a ella. | Corrija los nombres. | | `ValueError` | Llamó a `check()` sin nombres. | Nombre de 1 a 16 tipos. | ## Próximos pasos [#próximos-pasos] - [Tablas y esquemas](/docs/es/developers/tables) para definir claves y relaciones. - [Ejecutar SQL](/docs/es/developers/sql) para consultar las filas detrás del grafo. - [Límites y límites de solicitudes](/docs/es/developers/limits) para el presupuesto de recorrido.