2015-02-06 3 views
1

В Neo4j 1.9.2 я хотел бы рассчитать все отношения для узла EACH в наборе узлов.Neo4j 1.9.2: Запросить/фильтровать и подсчитывать несколько типов узлов

Все мои узлы имеют три свойства: type, id и created. Все они связаны «следованием». Вот пример того, как они подходят друг другу:

user('id:1')-[follows]->review('id:1') 
user('id:1')-[follows]->user('id:2') 
user('id:2')-[follows]->review('id:1') 

Вы получаете идею.

Результаты должны быть что-то вроде этого:

[ 
    { 
    followers: 2, 
    id: 1 
    created: 2013-12-13T12:13:42-08:00 
    type: review 
    }, 
    { 
    followers: 1, 
    id: 2, 
    created: 2012-02-13T12:13:43-08:00 
    type: user 
    }, 
    { 
    followers: 0, 
    id: 1, 
    created: 2012-02-13T12:13:43-08:00, 
    type: user 
    } 
] 

данные мне дали по существу следующее:

{ 
    users: [1, 2], 
    reviews: [1] 
} 

Я пытался запросов, как это:

start user1=node:user('id:1'), 
     user2=node:user('id:2'), 
     review1=node:review1('id:1') 

match user1<-[user1_f:follows]-(), 
     user2<-[user2_f:follows]-(), 
     review1<-[review1_f:follows]-() 

return user1, count(user1_f), 
     user2, count(user2_f), 
     review1, count(review1_f); 

Но, очевидно, это несостоятельно для больших списков node:id пар (на самом деле Neo умирает действительно когда запрос становится большим).

Любая идея, как достичь этого? Я проливал документы, чтобы узнать, есть ли какой-то способ, но я не уверен, что есть.

ответ

2

В случае, если вы хотите, чтобы запустить операцию подсчета для большого количества узлов, следует использовать индекс, как это:

start users=node:user('id:(1 OR 2 OR 3 OR 4)') 
match user<-[f:follows]-(), 
return user, count(f); 

Для обзоров, либо запустить отдельный запрос или создать индекс, проведение как пользователей, так и обзоры , Если у вас есть несколько стартовых точек, разделенных запятой, существует опасность столкнуться с перекрестными продуктами в матче.

PS: Neo4j 1.9.2 в значительной степени устарел - рассмотрите возможность обновления!

+0

Да, мы хотели бы обновить, к сожалению, это невозможно в данный момент. Хотя это на дорожной карте! Так что я слышу, что нет никакого способа сделать это через несколько полностью произвольных типов, если вы не индексируете все возможные комбинации. Я думаю, что было бы лучше просто сделать один запрос для каждого типа (так как у нас не так много разных типов). Благодаря! – wulftone

+0

Наконец-то я решил реализовать эту оптимизацию, и я получил 10-кратное сокращение времени отклика. Супер полезно! – wulftone

Смежные вопросы