Нахождение пути между root и конечными узлами в neo4j для нескольких поддеревьев эффективным способом - PullRequest
0 голосов
/ 12 февраля 2020

Я смоделировал данные транзакции в граф в neo4j из-за присущей родительской дочерней структуры данных. enter image description here

Я пытаюсь получить все пути от идентификаторов RootOrder до конечных узлов.

Поэтому я ожидаю вывод, подобный следующему:

RootOrderId1-> a1-> a2

RootOrderId1-> b1-> b2-> b3

RootOrderId1-> c1

RootOrderId2-> d1-> d2

RootOrderId2-> e1

RootOrderId2-> f1-> f2-> f3

RootOrderId2-> f1-> f2-> g1

Первая попытка

  def getPathBetweenTwoOrders(self, odr1, odr2 ):
        with self._driver.session() as session:
            query = ' '.join( ("MATCH (order1:ODR { ORDERID:\'" + odr1 + "\'}),",
                                      "(order2:ODR { ORDERID:\'" + odr2 + "\'}),",
                                      "p = shortestPath((order1)-[*]-(order2))",
                                      "WHERE length(p)> 1",
                                      "RETURN [node in nodes(p) | coalesce(node.ORDERID)] as nodes limit 1" ))
            return session.read_transaction(self._run_query, query)

Я передаю все пары ордеров, и путь возвращается. Это очень медленно 1039 * RootOrderId1-> a1-> a2

Вывод аналогичен для других путей.

Что не является ожидаемым выводом.

Я использую neo4j-community-3.5 .7 Редакция сообщества.

Какой самый эффективный способ сделать это для большого количества пар заказов?

Есть ли способ передать список заказов в neo4j и быстрее выполнять запросы .

...