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 ответа

Решение

Попробуйте изменить начало вашего запроса следующим образом.

  1. Добавить направление в отношения
  2. Добавить идентификатор (источник) > идентификатор (цель)
MATCH (source:Article)-->(neighbor<)--(target:Article)
WHERE id(source) > id(target)
WITH ...

Используйте ключевое слово DISTINCT

Я думаю, что вы можете использовать DISTINCT со свойством после возврата ключевого слова. попробуй это. EX:-

return collect(distinct label) as lab
Другие вопросы по тегам