Я смоделировал данные транзакции в граф в neo4j из-за присущей родительской дочерней структуры данных.
Я пытаюсь получить все пути от идентификаторов 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 и быстрее выполнять запросы .