Как я мог написать этот запрос в neo4j? - PullRequest
7 голосов
/ 05 августа 2011

Я очень новичок в neo4j и в графической базе данных в целом.Я создаю прототип приложения и не знаю, как мне написать эти запросы

У меня есть этот домен:

Отзыв о ресторане пользователя TypeOfFood

Итак, Restarurantесть один или несколько TypeOfFood, пользователь оставляет отзывы о ресторанах.Пользователь имеет некоторые предпочтительные продукты, соответствующие TypeOfFood, продаваемому в ресторане.Также пользователи связаны друг с другом, как правило, дружескими отношениями.

Некоторые из запросов, которые я пытаюсь написать:

  • Дайте мне все рестораны, которые мои друзья оценили с 3 или более звездами, которые делают вид едыМне нравится (исключая те рестораны, которые я уже просмотрел)

  • Предложите мне друзей, которых я знаю (наверное, это должно быть что-то вроде "все друзья, которые являются друзьями моих друзей, но пока нетмой, заказ чем-нибудь)

1 Ответ

13 голосов
/ 05 августа 2011

Используя язык запросов Neo4j's Cypher , вы можете написать свои запросы следующим образом:

Выбор лучших 20 лучших ресторанов, отсортированных по звездам и количеству отзывов

start user=(users,name,'Nico')
match user-[:FRIEND]->friend-[r,:RATED]->restaurant-[:SERVES]->food,
      user-[:LIKES]->food,user-[:RATED]->rated_by_me
where r.stars > 3
return restaurant.name, avg(r.stars), count(*)
order by avg(r.stars) desc, count(*) desc 
limit 20

Друзья друга

start user=(users,name,'Nico')
match user-[:FRIEND]->friend->[:FRIEND]->foaf
return foaf, foaf.name

Вы можете выполнить эти зашифрованные запросы в Neo4j Webadmin Console * в вашем наборе данных, но также и в оболочке neo4j, удаленно через Cypher-Rest-плагин через Spring Data Graph .

Существует также скринкаст , в котором обсуждаются похожие запросы на шифре.

Вы также можете использовать Gremlin , Neo4j-Traversers или ручного перемещения по getRelationships, если хотите.

...