2014-06-26 5 views
1

J'utilise py2neo et j'essaie de passer un paramètre (une étiquette) entre les méthodes de correspondance, mais je ne peux pas comprendre la syntaxe. Dans le navigateur, j'utiliser ceci:Y at-il un moyen de passer un paramètre pour correspondre sur des étiquettes dans neo4j

MATCH n 
where n:`Name` 
RETURN n 

Ceci est mon code python, où je suis en train de faire correspondance similaire:

def similar_noder(a): 

try: 
    graph_db = neo4j.GraphDatabaseService(url) 
    query = neo4j.CypherQuery(graph_db, 
    """CYPHER 2.0 
     MATCH n  
     where (n:`{z}`) 
     RETURN id(n) 
     """) 
    result = query.execute(z=a) 
    for r in result:   
     label = ", ".join(str(e) for e in (r.values[0]))#label 
     print label    
except Exception as e: 
    print e 

Dans ce cas, « un » nom est le label » "que j'essaie de passer et de faire correspondre. J'essaye de trouver tous les noeuds qui ont le nom d'étiquette.

+1

duplication possible de [Etiquetage des paramètres] (http://stackoverflow.com/questions/21834113/parameterizing-labels) –

+0

@StefanArmbruster bien que c'est un défaut. Il semble que ce n'est pas possible. – user2338089

+2

ce n'est pas un bummer. Une étiquette différente peut conduire à un plan de requête complètement différent, il n'est donc pas logique d'utiliser des paramètres pour les étiquettes. Vous pouvez toujours paramétrer l'instruction de chiffrement du côté de l'application en utilisant une concaténation de chaîne ou en utilisant un générateur pour cela, par ex. Cypher DSL. –

Répondre

2

Quelque chose que vous pouvez faire, quand vous n'avez pas beaucoup de nœuds à la recherche est d'utiliser ceci:

MATCH (n) 
WHERE {z} IN labels(n) 
RETURN n 

Mais il ne sera pas rapide, comme Cypher ne peut l'optimiser si elle n » Je connais l'étiquette au moment de la compilation.

+0

C'est assez bien pour ce que j'essaie de faire. Merci! – user2338089

Questions connexes