La requête autonet().src().dest().depth()
peut trouver et retourner des paths d'un groupe de noeuds initiaux à un groupe de noeuds terminaux. Il s'agit d'un traitement par lots de requêtes de path A-B en associant un noeud initial et un noeud terminal pour chaque requête, et son paramètre limit()
limite le nombre de retours de chaque paire A-B de chaque sous-requête, mais pas celui de toutes les paires A-B de chaque sous-requête.
Déterminée par l'utilisation du paramètre dest()
, la requête autonet fonctionne en deux modes :
a) Réseau Inter-groupe (lors de la définition de dest()
)
N
noeuds d'un groupe appariés avecM
noeuds d'un autre groupeN * M
fois de requête de path A-B- Lorsque le paramètre
limit(n)
est utilisé et que la valeur de n n'est pas -1, un maximum den
*N * M
paths sera trouvé
b) Réseau Intra-groupe (lors de l'omission de dest()
)
- N noeuds d'un groupe appariés entre eux :
N(N-1)/2
fois de requête de path A-B- Lorsque le paramètre
limit(n)
est utilisé et que la valeur de n n'est pas -1, un maximum den
*N(N-1)/2
paths sera trouvé
Syntaxe :
- Alias de déclaration : supporté (PATH)
- Tous les paramètres :
Paramètre | Type | Spécification | Description | Structure d'Alias Personnalisé |
---|---|---|---|---|
src() |
Filtre | Obligatoire | Les règles de filtrage du noeud de départ | NODE |
dest() |
Filtre | Les règles de filtrage du noeud d'arrivée | NODE | |
depth() |
Plage | Obligatoire | Pour définir la profondeur du path depth(N) : N edges depth(:N) : 1~N edges depth(M:N) : M~N edges depth(N).shortest() : le path le plus court dans N edges |
Non supporté |
shortest() |
/ ou @<schema>.<property> |
property numeric LTE-ed edge | Retourne le path (pondéré) le plus court. Lorsqu'une property d'edge (avec des valeurs non négatives) est spécifiée, les edges sans cette property ne seront pas pris en compte La méthode shortest() ne supporte que depth(N) , indiquant les paths les plus courts (pondérés) dans N étapes |
Non supporté |
node_filter() |
Filtre | Les règles de filtrage que les noeuds autres que src et dest doivent respecter |
Non supporté | |
edge_filter() |
Filtre | Les règles de filtrage que tous les edges doivent respecter | Non supporté | |
direction() |
Chaîne | gauche, droite | Pour spécifier la direction de l'edge | Non supporté |
no_circle() |
/ | / | Pour ignorer les paths avec cercles ; voir Concept de base - Terminologies pour la définition de cercle | Non supporté |
limit() |
Int | -1 ou >=0 | Nombre de résultats de chaque paire A-B à retourner, -1 signifie retourner tous les résultats | Non supporté |
Graphe d'exemple : (à utiliser pour les exemples suivants)
create().edge_property(@default, "weight", int32)
insert().into(@default).nodes([{_id:"A", _uuid:1}, {_id:"B", _uuid:2}, {_id:"C", _uuid:3}, {_id:"D", _uuid:4}, {_id:"E", _uuid:5}, {_id:"F", _uuid:6}])
insert().into(@default).edges([{_uuid:1, _from_uuid:1, _to_uuid:3, weight:1}, {_uuid:2, _from_uuid:5, _to_uuid:2 , weight:1}, {_uuid:3, _from_uuid:1, _to_uuid:5 , weight:4}, {_uuid:4, _from_uuid:4, _to_uuid:3 , weight:2}, {_uuid:5, _from_uuid:5, _to_uuid:4 , weight:3}, {_uuid:6, _from_uuid:2, _to_uuid:1 , weight:2}, {_uuid:7, _from_uuid:6, _to_uuid:1 , weight:4}])
Inter-Groupe : Filtrer la Profondeur
Exemple : Trouver des paths de 1 à 3 étapes de [A,B] à [D,E], transporter toutes les properties
autonet().src({_id in ["A","B"]}).dest({_id in ["D","E"]}).depth(:3) as p
return p{*}
A --3--> E --5--> D
A --1--> C <--4-- D
A <--6-- B <--2-- E --5--> D
A --3--> E
A --1--> C <--4-- D <--5-- E
A <--6-- B <--2-- E
B --6--> A --3--> E --5--> D
B --6--> A --1--> C <--4-- D
B <--2-- E --5--> D
B --6--> A --3--> E
B <--2-- E
Inter-Groupe : Path le Plus Court Non-Pondéré
Exemple : Trouver les paths les plus courts de [A,B] à [D,E] en 3 étapes, transporter toutes les properties
autonet().src({_id in ["A","B"]}).dest({_id in ["D","E"]}).depth(3)
.shortest() as p
return p{*}
A --1--> C <--4-- D
A --3--> E --5--> D
A --3--> E
B <--2-- E --5--> D
B <--2-- E
Inter-Groupe : limit()
Exemple : Trouver des paths de 1 à 3 étapes de [A,B] à [D,E], retourner 1 path pour chaque paire de noeuds, transporter toutes les properties
autonet().src({_id in ["A","B"]}).dest({_id in ["D","E"]}).depth(:3).limit(1) as p
return p{*}
A <--6-- B <--2-- E --5--> D
A <--6-- B <--2-- E
B <--2-- E --5--> D
B <--2-- E
Intra-Groupe : Filtrer la Profondeur
Exemple : Trouver des paths de 1 à 3 étapes parmi [A,B,C], transporter toutes les properties
autonet().src({_id in ["A","B","C"]}).depth(:3) as p
return p{*}
A --3--> E --2--> B
A <--6-- B
A --3--> E --5--> D --4--> C
A --1--> C
B --6--> A --1--> C
B <--2-- E --5--> D --4--> C
B <--2-- E <--3-- A --1--> C
Intra-Groupe : Path le Plus Court Non-Pondéré
Exemple : Trouver les paths les plus courts parmi [A,B,C] en 3 étapes, transporter toutes les properties
autonet().src({_id in ["A","B","C"]}).depth(3)
.shortest() as p
return p{*}
A <--6-- B
A --1--> C
B --6--> A --1--> C
Intra-Groupe : limit()
Exemple : Trouver des paths de 1 à 3 étapes parmi [A,B,C], retourner 1 path pour chaque paire de noeuds, transporter toutes les properties
autonet().src({_id in ["A","B","C"]}).depth(:3).limit(1) as p
return p{*}
A <--6-- B
A --1--> C
B <--2-- E <--3-- A --1--> C