У меня есть очень простая структура:Возвращающихся наиболее распространенные пути в Neo4j
U1-:VISITS->P1-:VISITS->P2-:VISITS->P3-VISITS->P4...
Каждых ПОЕЗДКИ отношение имеет рейтинг по шкале от 1 до 10. Я заинтересован в отношениях, которые начинаются с U1-: VISITS-> P1-: VISITS-> P2, где 1-й рейтинг < 2, а второй рейтинг больше 5. Каждый узел страницы имеет ссылку на страницу как свойство. После этого меня интересуют следующие 2 страницы, которые посещает пользователь. Это должно возвращать список путей. Меня интересуют наиболее частые пути, которые пользователь принимает, и заказывая их количество раз, когда они появляются. Мой запрос не возвращает правильное количество путей. Что я сделал не так?
MATCH p=(a)-[r:VISITS]-(b)-[t:VISITS]-(c)-[q*1..2]-(page:Page) WHERE r.rating<2 AND t.rating>5 RETURN EXTRACT (n IN nodes(p)|n.page_id) ,count(p) ORDER BY count(p) DESC;
Например:
U1->P1->P2
U2->P1->P2
U3->P3->P4
должны иметь
P1,P2 2
P3,P4 1
в качестве конечного результата.
EDIT: Это мое решение, которое возвращает правильный результат для указанной задачи (u-> P1-> p2):
MATCH p=(a)-[r:VISITS]-(b:Page)-[t:VISITS]-(page:Page) WHERE r.rating<2 AND t.rating>5 WITH EXTRACT (n IN nodes(p)|n.page_id) AS my_pages,t AS rels RETURN DISTINCT(my_pages) AS pages,count(DISTINCT rels) as count;
мне нужно, чтобы расширить его теперь включить длинные пути.
Да, по какой-то причине я не использовал направления, и это было одним из причины, по которым я не получил правильного результата. Вероятно, я не правильно объяснил исходный пост, но я рассчитываю подсчитать количество одинаковых путей, а не считать число узлов в пути. – user201411
Hrmm, интересно. Может быть, 'RETURN count (DISTINCT p)'? –
Я уточнил исходный вопрос. Я не хочу подсчитывать количество узлов, я пытаюсь вернуть счет различных путей. RETURN count (DISTINCT p) вернет 5, в то время как я ищу 3. Причина, по которой он возвращает 5, состоит в том, что он подсчитывает U1-> P1, а затем U1-> P1-> P2, тогда как он должен считать только U1- > P1-> P2 – user201411