2017-01-29 1 views
0

J'essaie de résoudre une requête MATCH simple en utilisant OrientDB.OrientDB - requête de correspondance pour le recommandeur

Je recommande pour l'utilisateur A que bougth P produit en commun à l'utilisateur B.

Lorsque je tente cette requête je une erreur qui indique « une erreur à la ligne 1 colonne 33 »

SELECT d1.UserId, d2.UserId FROM (
    MATCH 
    {class:User, as: U1} -buy-> {class:Product, as:P}, 
    {class:User, as: U2} -buy-> {as:P}, 
    {as:U2} -buy-> {class:Product, as P2} 
    RETURN U1 as d1, U2 as d2, O as o 
) 

Avez-vous des suggestions pour résoudre mon problème?

Merci Rob

Répondre

1

vous manquez une : à la fin du modèle dernier, essayez ce qui suit

SELECT d1.UserId, d2.UserId FROM (
    MATCH 
    {class:User, as: U1} -buy-> {class:Product, as:P}, 
    {class:User, as: U2} -buy-> {as:P}, 
    {as:U2} -buy-> {class:Product, as:P2} 
    RETURN U1 as d1, U2 as d2, O as o 
) 
+0

Merci Luigi pour l'aide, c'était une faute de frappe terrible. Quoi qu'il en soit, j'ai vu que les performances de l'énoncé de match sont limitées. Avez-vous une idée de l'amélioration potentielle pour me suggérer? –

+0

Combien de temps cela prend-il? – Lvca

+0

Quelle est la taille de votre base de données? vous ne filtrez pas la requête de quelque façon que ce soit, donc vous pouvez vous attendre à ce qu'il scanne tous les db ... –

0

Enfin, je pense que la meilleure solution est

SELECT d1.UserId, d2.UserId FROM (
    MATCH 
    {class:User, as: U1, where: (UserId=12345) } -buy-> {class:Product, as:P}, 
    {class:User, as: U2, where: (UserId<>12345)} -buy-> {as:OP}, 
    {as:U2} -buy-> {class:Product, as:P2} 
    RETURN U2 as d2, P, OP 
) 

Merci pour tous l'aide.

R.