2011-11-07 3 views
1

Étant nouveau Cypher requêtes sur le graphique des données du printemps, cela peut être tout à fait trivial ...requête Cypher pour obtenir des noeuds avec propriété donnée valeurs

Je cherche quelle serait la requête Cypher chercher tous les nœuds qui ont une valeur donnée pour un couple de propriétés. Alors, quel serait ??? dans l'annotation @Query pour ce qui suit:

@Query(???) 
List<MyObject> findByProperty1AndProperty2(String property1, String property2) 

EDIT: Alors, je réussi à utiliser les requêtes dérivées en ajoutant des dépendances Cypher (comme le suggère Michael ci-dessous). Mais je semble obtenir l'erreur ci-dessous:

string matching regex (?i)\Qreturn\E' expected but ,' found

Je pense que c'est parce qu'il semble créer une requête comme:

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0}, n.property2 = {1} return n

plutôt que

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0} and n.property2 = {1} return n

(Notez le , au lieu de and dans la requête)

Merci d'avance.

Répondre

4

Veuillez prendre en compte que les requêtes globales ne sont pas le point fort de Neo4j, mais que vous utilisez Spring Data Neo4j un peu allégé. :)

En fait, vous n'avez pas besoin d'une annotation @Query pour cette requête.

Il construit une requête dérivée qui regarde quand même vos propriétés, si l'une d'elles est indexée, elle utilisera celle-là comme point de départ pour votre requête sinon elle va tirer toutes les entrées de l'index "__type__".

En fait, il va créer une requête comme:.

start n=node:__types__(className="com.example.MyObject") 
where n.property1 = {0} and n.property2 = {1} 
return n 

Donc, si vous utilisez la version de l'instantané actuel de NRS (qui sera publié en RC1 cette semaine Vous pouvez juste faire:

List<MyObject> findByProperty1AndProperty2(String property1, String property2) 

Bien sûr Cypher et Gremlin sont des dépendances optionnelles dans NRS (b/c certaines personnes ne veulent pas tirer scala/groovy par défaut). Il vous suffit d'ajouter la dépendance maven Cypher à votre projet

<dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j-cypher</artifactId> 
    <version>${neo4j.version}</version> 
</dependency> 
+0

Merci d'avoir répondu, @Michael! Mais comme mentionné dans un autre article, lorsque j'utilise des requêtes dérivées, j'obtiens une erreur - "Cypher n'est pas disponible, veuillez l'ajouter à vos dépendances". Des idées pourquoi? (J'utilise SDN 2.0.0.M1) – Saket

+0

après avoir ajouté la dépendance je reçois une erreur comme: 'string correspondant regex' (? I) \ Qreturn \ E 'attendu mais ',' trouvé' – Saket

+0

je pense que la raison est car il semble créer une requête du type: 'start n = noeud: __ types __ (className =" com.example.MyObject ") où n.property1 = {0}, n.property2 = {1} renvoie n' plutôt que' start n = noeud: __ types __ (className = "com.example.MyObject") où n.property1 = {0} et n.property2 = {1} retournent n'. Notez le ',' au lieu de 'and' dans ma requête – Saket

Questions connexes