Neo4j: результаты дублируются
Поэтому я пытаюсь найти каждый узел, у которого есть хотя бы один общий узел, с другим. Это запрос, который я использую для этого:
MATCH (source:Article)--(neighbor)--(target:Article)
WHERE NOT (source.unique_url) = (target.unique_url)
WITH DISTINCT [source.unique_url, target.unique_url] AS combo,
source, target, neighbor
RETURN combo,
source.unique_url AS source_unique_url,
source.title AS source_title,
source.url AS source_url,
target.unique_url AS target_unique_url, target._id AS target_id,
target.title AS target_title,
count(neighbor) AS common_neighbors
ORDER BY common_neighbors DESCENDING
Но к сожалению [source.unique_url, target.unique_url]
всегда дублируется, как для одного узла, имеющего общего соседа с другим, я всегда получаю результаты, подобные этому:
[url1, url2]
[url2, url1]
[url1, url2]
[url2, url1]
Я проверил и данные не дублируются в БД, поэтому запрос дублирует их, кто-нибудь знает, что может быть причиной этого? Большое спасибо!
2 ответа
Решение
Попробуйте изменить начало вашего запроса следующим образом.
- Добавить направление в отношения
- Добавить идентификатор (источник) > идентификатор (цель)
MATCH (source:Article)-->(neighbor<)--(target:Article) WHERE id(source) > id(target) WITH ...
Используйте ключевое слово DISTINCT
Я думаю, что вы можете использовать DISTINCT со свойством после возврата ключевого слова. попробуй это. EX:-
return collect(distinct label) as lab