У меня есть база данных графа, где есть пользовательские и узлы интереса, которые связаны IS_INTERESTED отношений. Я хочу найти интересы, которые не выбраны пользователем. Я написал этот запрос и он не работаетCypher Query не возвращает несуществующие отношения
OPTIONAL MATCH (u:User{userId : 1})-[r:IS_INTERESTED] -(i:Interest)
WHERE r is NULL
Return i.name as interest
Согласно ответам на подобные вопросы на SO (например, this один), приведенный выше запрос должен work.However, в этом случае она возвращает нуль. Но при выполнении следующего запроса работает, как ожидалось:
MATCH (u:User{userId : 1}), (i:Interest)
WHERE NOT (u) -[:IS_INTERESTED] -(i)
return i.name as interest
причина, почему я не хочу, чтобы запустить приведенный выше запрос, потому что Neo4j выдает предупреждение:
Этот запрос строит декартово произведение между отключенными шаблонами.
Если часть запроса содержит несколько несвязанных шаблонов, это будет строить декартовую продукцию между всеми этими частями. Это может производить большой объем данных и замедлять обработку запросов. В то время как иногда предназначено, это часто может быть возможно переформулирует запроса, который избегает использования этого перекрестного продукта, возможно, путем добавления отношения между различными частями или с помощью ДОПОЛНИТЕЛЬНОГО MATCH (идентификатор: (я))
Что я делаю неправильно в первом запросе, где я использую ДОПОЛНИТЕЛЬНАЯ МАТЧА, чтобы найти несуществующие отношения?
Это умный способ! Он работает сейчас. Благодаря! – avidProgrammer