2015-04-10 1 views
0

J'ai un doute sur les performances d'une requête Cypher dans Neo4j. La situation est la suivante: chaque nœud de mon graphique a une propriété et je voudrais compter le nombre de nœuds ayant la même propriété. Donc, ma requête de base estNeo4j - Index et performances

match (n:NodeLabel) 
with n.community as community, n.myid as myid 
match (m) where m.community = community 
return myid, count(m) as totcommunity 

J'ai créé un index sur la propriété « communauté »

create index on :NodeLabel(Community) 

Mais les performances sont très pauvres: il faut les âges pour un graphe avec noeuds 200.000. Comment puis-je obtenir de meilleures performances?

Merci à l'avance

Répondre

1

Vous avez oublié d'ajouter la bel pour le deuxième match, il ne peut pas utiliser l'index: Essayez ceci:

match (n:NodeLabel) 
match (m:NodeLabel) where m.community = n.community 
return n.myid as myid, count(*) as totcommunity 

Vous pouvez également vous assurer qu'il utilise l'index par votre requête avec préfixer EXPLAIN et vérifiez le plan de requête.

+0

Merci pour la clause EXPLAIN (je ne le savais pas). Mais que se passe-t-il si j'ai des étiquettes différentes pour les nœuds et que je voudrais vérifier la propriété de la communauté pour chacun d'entre eux? Êtes-vous en train de me dire que si je ne spécifie pas d'étiquette pour le noeud, il n'utilisera pas l'index pour la propriété spécifiée? – besil

+0

Je ne comprends pas comment utiliser la clause EXPLAIN. Pourriez-vous fournir un exemple? Merci beaucoup – besil

1

Si vous voulez retourner chaque valeur communautaire distincte et le nombre de noeuds avec cette valeur:

MATCH (n:NodeLabel) 
RETURN n.community, COUNT(n); 

Si, au contraire, vous voulez obtenir le compte du nombre de nœuds avec le même community valeur en tant que nœud spécifique (identifié comme mon myid), essayez cette requête:

MATCH (n:NodeLabel {myid: 123}) 
WITH n.community AS c, n.myid AS myid 
MATCH (n:NodeLabel) 
WHERE n.community = c 
RETURN myid, n.community, COUNT(n); 
+0

Merci pour votre réponse. Oui, ça devrait marcher. Mais je veux pour des nœuds spécifiques la taille de la communauté à laquelle ils appartiennent, pas la taille de toutes les communautés. – besil

+0

Oui c'est. Mais le problème était d'utiliser l'étiquette désirée lors de l'appariement des nœuds. Merci beaucoup pour votre réponse – besil