Как исключить определенные отношения для прогнозирования в реальном времени в Neo4j - PullRequest
0 голосов
/ 18 января 2020

Итак, я работаю над вопросом предсказания в реальном времени, например, у меня есть узел (A) (: Person), и у него есть друзья и узел (B) как (: Games), поэтому у узла (A) есть Мне понравилась определенная Игра, а его друзьям понравились другие игры, поэтому я рекомендую эти другие игры для него Но дело в том, что мне нужно исключить игры, в которые он уже любил или играл . Кажется, это легко сделать с командой «НЕ», но я пока не смог найти правильный код для нее, хотя я пробовал множество способов, которые мне кажутся наиболее близкими:

match (A:Person)-[:Friend]-(n:Person)
where A <> n
with distinct n
match (n)-[:LIKED]-(B:Game)-[:ON]-(:steam), (k:Person{name:'John'})
where not ((k)-[:LIKED]-(:Game)-[:ON]-(:steam))
return B

который должен рекомендовать игры, которые понравились друзьям Джона, без игр, которые Джон уже любил.

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

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Если вы хотите найти в Steam особенные игры, которые понравились друзьям Джона, но Джон еще не любил и не играл, то это должно сработать:

MATCH (j:Person{name:'John'})-[:FRIEND]-(:Person)-[:LIKED]->(g:Game)-[:ON]-(:steam)
WHERE NOT (j)-[:LIKED|PLAYED]->(g)
RETURN DISTINCT g
0 голосов
/ 18 января 2020

Последнее предложение WHERE имеет очень мало ограничений и, вероятно, объясняет зависание / тайм-аут. Это может помочь иметь имя переменной для каждой метки, либо для ограничения запроса, либо для получения узлов. больше похоже на это

где нет ((k: Person {имя: 'Джон'}) - [: LIKED] -> (B: Game) - [: ON] -> (C: steam) ) вернуть B

указать направленное -> отношения (как указано выше) в запросах на шифрование, если это возможно, обычно оно обеспечивает требуемый ответ и быстрее.

добавление имени переменной и направления отношения также облегчает чтение запроса, чтобы понять, что он делает, и если вам нужно посмотреть на значения узлов / отношений при отладке.

Я могу ошибаться, но метка: steam не выглядит прямо для меня. Каковы примерные значения? Мне интересно, если вы хотели иметь: сервисный узел, и steam будет экземпляром узла?

Примечание: если вы предоставите сценарий create node / rels для создания небольшого примера этой базы данных (например, дюжина узлов с этими отношениями), будет проще предоставить пример работающего шифра.

...