Grafo de conocimiento
Defina, construya y recorra el grafo de las entidades de sus datos y cómo se relacionan.
El muestra las entidades de sus datos (clientes, pedidos, sedes) y cómo se relacionan. No se copia nada: un tipo de nodo es una 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 Datos, en Grafo de conocimiento.
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
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 builtCambie la definición
La definición nombra tablas y columnas existentes, y se revisa antes de guardarse.
Lea, edite y guarde
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
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
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:
queued = nexus.knowledge_graph.assert_edges("supplies", edges)Recorra el grafo
Parta de un registro
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
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
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 connectedBusque 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:
for hit in nexus.search("solar panel invoice", limit=10):
print(hit)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
- Tablas y esquemas para definir claves y relaciones.
- Ejecutar SQL para consultar las filas detrás del grafo.
- Límites y límites de solicitudes para el presupuesto de recorrido.