2012-06-04 3 views
1

Je souhaite utiliser les résultats de la première requête de la deuxième requête. Je ne suis pas sûr de savoir comment faire cela dans Cypher?Comment fournir plusieurs requêtes dans Neo4j Cypher?

Code actuel,

START user1=node:USER_INDEX(USER_INDEX = "userA") 
MATCH user1-[r1:ACCESSED]->docid1<-[r2:ACCESSED]-user2, user2-[r3:ACCESSED]->docid2 
WHERE r2.Topic=r3.Topic 
RETURN distinct docid2.Label; 

Je veux avoir des conditions cochés dans la clause WHERE pour l'ensemble même docid2 de nœuds et d'accumuler les résultats et effectuer par ordre basé sur un champ de date. Je ne suis pas en mesure de fournir plusieurs correspondance et retour dans la même transaction. C'est alors que j'essaie d'avoir deux scripts de chiffrement différents et de les combiner dans une troisième requête. Est-ce possible en chiffre? Ou existe-t-il une option pour écrire des fonctions personnalisées et les appeler? Avons-nous stocké des scripts Cypher comme les scripts Stored Gremlin?

+1

Vous pouvez regarder dans qui vous permet de résultats tuyau d'interrogation (agrégés) de une partie de requête à l'autre, donc vous pouvez faire par exemple un HAVING avec deux clauses where. voir: http://docs.neo4j.org/chunked/snapshot/query-with.html –

Répondre

1

Comme Michael l'a mentionné dans le commentaire, vous pouvez utiliser l'instruction "with" pour diffuser le résultat dans d'autres instructions. Malheureusement, vous ne pouvez pas démarrer une autre instruction après la clause "where". déclarations de retour multiples serait un peu illogique, mais vous pouvez faire plusieurs choses en une seule requête, par exemple:

START x=node:node_auto_index(key="x") 
with count(x) as exists 
start y=node:node_auto_index(key="y") 
where exists = 0 
create (n {key:"y"})<-[:rel]-y 
return n, y 

Ce vérifierait si le noeud « x » existe et si elle ne veut pas, procéder à la création et ajouter un couple de paramètres.

Si vous souhaitez faire des choses plus sophistiquées sur les jeux de résultats, vos meilleures options sont soit des demandes de traitement par lots ou l'API Java ...