Получить путь после запроса neo4j Java
Я пытаюсь сделать запрос, чтобы найти все возможные пути, которые соответствуют шаблону "(Заказ) - [ORDERS] -> (Продукт) - [PART_OF] -> (Категория)" и хотел бы получить весь путь (т.е. все 3 узла и 2 отношения как их соответствующие классы).
Метод, который я использовал ниже, позволил мне получить только 1 столбец данных (количество заказов: 2155). Если бы я попробовал это еще раз (2-й цикл for), число строк, которое я получил бы, равно 0(количество продуктов: 0). Есть ли способ сохранить все результаты в виде узлов и отношений, или мне нужно запросить команду 5 раз? Пожалуйста помоги!
String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return o,p,cate";
try( Transaction tx = db.beginTx();
Result result = db.execute(query) ){
Iterator<Node> o_column = result.columnAs( "o" );
int i = 0;
for ( Node node : Iterators.asIterable( o_column ) )
{
i++;
}
System.out.println("number of orders: " + i);
i = 0;
Iterator<Node> p_column = result.columnAs( "p" );
for ( Node node : Iterators.asIterable( p_column ) )
{
i++;
}
System.out.println("number of products: " + i);
tx.success();
}
2 ответа
Я нашел способ обойти это в коде ниже, где я бы изменил возвращаемое значение на идентификатор узла, используя id()
затем использует GraphDatabaseService.getNodeByID(long)
:
String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return id(o), id(p), id(cate)";
int nodeID = Integer.parseInt(column.getValue().toString());
Node node = db.getNodeById(nodeID);
Если вы делаете это:
MATCH path=(o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return path
Вы можете обработать путь в вашем цикле и распаковать его. Требуется немного изучения, но вся информация там.
Надеюсь, это поможет.
С уважением, Том