2016-06-05 5 views
0

Ich habe die unten auf Neo4j DatensatzNeo4j Fehler: Typenkonflikt: erwartet Float oder Integer aber war Knoten

create (recipe1:recipe {name: 'recipe-1'}) 
create (recipe2:recipe {name: 'recipe-2'}) 
create (recipe3:recipe {name: 'recipe-3'}) 
create (recipe4:recipe {name: 'recipe-4'}) 
create (recipe5:recipe {name: 'recipe-5'}) 
create (recipe6:recipe {name: 'recipe-6'}) 
create (user1:user {name: 'user-1'}) 
create (user2:user {name: 'user-2'}) 
create (user3:user {name: 'user-3'}) 
create (user4:user {name: 'user-4'}) 
create 
    (user1)-[:LIKES]->(recipe1), 
    (user1)-[:LIKES]->(recipe2), 
    (user1)-[:LIKES]->(recipe4), 
    (user2)-[:LIKES]->(recipe4), 
    (user2)-[:LIKES]->(recipe6), 
    (user3)-[:LIKES]->(recipe1), 
    (user3)-[:LIKES]->(recipe3), 
    (user3)-[:LIKES]->(recipe6), 
    (user4)-[:LIKES]->(recipe4) 

und versuchen, die unter Abfrage auszuführen:

match (user4:user {name: 'user-4'})-[LIKES]->recipe<-[:LIKES]-slm-[:LIKES]->recommendations 
where not(user4 = slm) and not(user4-recommendations) 
return count(*) AS recommendationsWeight, 
recommendations.name AS name 
order by recommendationsWeight DESC, name DESC 

aber ich bin immer der folgende Fehler:

Type mismatch: expected Float or Integer but was Node (line 2, column 32 (offset: 123)) 
"where not(user4 = slm) and not(user4-recommendations)" 
           ^

eine Idee, was ich hier falsch mache?

Update:

Was will ich hier tun mit not(user4-recommendations) ist zu sagen, dass alle Empfehlungen, die user4 keine Beziehung hat mit. Betrachten wir zum Beispiel diese:

match (user4:user {name: 'user-4'}), (recipe1:recipe {name: 'recipe-1'}) 
create (user4)-[:DISLIKES]->(recipe1) 

So umfassen sollte das Ergebnis meiner Empfehlung Abfrage nicht recipe1 als Benutzer damit vor interagiert hat.

+0

Ich glaube, ich auch einen weiteren Fehler auf meine Frage haben: 'match (user4: Benutzer {name : 'user-4'}) - [LIKES] 'wo sollte es wirklich sein:' match (user4: user {name: 'user-4'}) - [: LIKES] '. – tugberk

Antwort

2

Sie haben einen Tippfehler :: - statt =. Und vergiss nicht die Klammern:

match (user4:user {name: 'user-4'})-[LIKES]-> 
     (recipe) 
     <-[:LIKES]-(slm)-[:LIKES]-> 
     (recommendations) 
where not(user4 = slm) and not(user4 = recommendations) 
return count(*) AS recommendationsWeight, 
     recommendations.name AS name 
order by recommendationsWeight DESC, 
     name DESC 

Ich denke, dass Sie versuchen, ein empfehlendes System zu bauen. Dann wird die Anfrage einfacher (keine Schecks sind nicht erforderlich, es funktioniert, weil es kein zero-length path verwendet wird):

match (user4:user {name: 'user-4'}) 
     -[:LIKES]->(recipe)<-[:LIKES]- 
     (slm)-[:LIKES]->(recommendations) 
where not ((user4)-[:DISLIKES|LIKES]->(recommendations)) 
return recommendations, 
     count(recommendations) as recommendationsWeight 
order by recommendationsWeight desc, 
     recommendations.name asc 
+0

'not (user4 = recommendations)' ergibt keinen Sinn, da user4 ein Benutzer ist, während es sich bei Empfehlungen um eine Sammlung von Rezepten handelt. Was ich hier sagen möchte, ist: "irgendwelche Empfehlungen, zu denen ein Benutzer keine Beziehung hat". – tugberk

+1

Nun, ich beantwortete die Frage - "Warum der Fehler" :) Können Sie genauer erklären, welches Ergebnis Sie erhalten möchten? –

+0

Messepunkt, aktualisierte die Frage – tugberk