# 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.