2017-01-29 16 views
0

Я пытаюсь решить простой запрос MATCH, используя OrientDB.OrientDB - запрос соответствия для рекомендателя

Я бы рекомендовал для пользователя А что bougth продукт P в общей для пользователя B.

Когда я пытаюсь этот запрос я получаю ошибку, что государства «ошибка в строку 1 столбец 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 
) 

Есть ли у вас какие-либо предложения для решения моей проблемы?

Благодаря Роб

ответ

1

Вы пропустите : в конце прошлого рисунка, попробуйте следующее

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

С благодарностью Луиджи за помощь, это была ужасная опечатка. Во всяком случае, я видел, что выполнение команды соответствия ограничено. Есть ли у вас какие-либо идеи о возможном улучшении, чтобы предложить мне? –

+0

Сколько времени занимает? – Lvca

+0

Насколько велика ваша БД? вы не фильтруете запрос каким-либо образом, поэтому можете ожидать, что он сканирует все db ... –

0

Наконец, я думаю, что лучшим решением является

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 
) 

Спасибо за все помощь.

R.