Как я мог написать эти запросы в neo4j?


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

У меня есть такой домен:

Пользователь Ресторан Обзор TypeOfFood

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

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

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

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

1 7

1 ответ:

Используя язык запросов Neo4j 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 консоли на ваш набор данных, но и в СУБД Neo4j-Shell и удаленно-через шифр-остальное-плагин через Весенняя данных диаграммы.

Есть также скринкаст обсуждение похожие запросы на Сайфера.

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