neo4j хранит количество ребер, которые узел имеет в качестве атрибута отношения (способ сделать график взвешенным) - PullRequest
0 голосов
/ 27 февраля 2019

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

Есть ли запрос, который поможет мне достичь этого?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

путем изменения этого запроса MATCH (n), ГДЕ размер ((n) - [: AGGREGATED] -> ()) = 0 И размер ((n) -> ())> 0 С ПРЕКРАЩЕНИЕМ 1000 МАТЧ (n)) - [r] -> (m) С n, m, count (r) AS count CREATE (n) - [: AGGREGATED {weight: count}] -> (m) RETURN count (*);

Я пришел к точке, где я хочу, с помощью следующего запроса

ДОПОЛНИТЕЛЬНОЕ МАТЧ (u: Болезнь) - [r: HAS_CHILD] -> (o: Болезнь) С u, o, считать (r) какcount CREATE (u) - [r: HAS_CHILD {weight: count}] -> (o) ВОЗВРАТ u, r, o;

РЕЗУЛЬТАТ ПОСЛЕ УДАЛЕНИЯ ДУБЛИКАТОВ ОТНОШЕНИЯ

0 голосов
/ 27 февраля 2019

Вы можете попробовать что-то вроде этого:

MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
  CREATE (n)-[:AGGREGATED { weight:count}]->(m)

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

Таким образом, вы должны пакетировать этот запрос:

MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0 
WITH n LIMIT 1000
  MATCH (n)-[r]->(m)
  WITH n, m, count(r) AS count
    CREATE (n)-[:AGGREGATED { weight:count}]->(m)
    RETURN count(*)

Вы можете выполнить этот запрос снова и снова, пока его результат не будет 0. И если вы ленивы, в APOC есть процедура, чтобы сделатьчто:

call apoc.periodic.commit("
    MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0 
    WITH n LIMIT $limit
      MATCH (n)-[r]->(m)
      WITH n, m, count(r) AS count
        CREATE (n)-[:AGGREGATED { weight:count}]->(m)
        RETURN count(*)", {limit: 1000});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...