Использование функции ‘astar’ в OrientDB: вызов SQL в Java

#java #sql #orientdb #graph-databases #a-star

#java #sql #orientdb #графические базы данных #a-star

Вопрос:

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

 public void getShortestPath(int from, int to){
    String query = "SELECT astar(?, ?, time, direction=OUT, customHeuristicFormula=EUCLIDEAN) FROM V";
    OResultSet set = db.query(query, getNode(from).getProperty("@rid"), getNode(to).getProperty("@rid"));
}
 

getNode(nodeID) Метод возвращает объект OVertex, присутствующий в базе данных, следовательно, мы можем идентифицировать @rid . Очевидно, что этот метод не имеет смысла как есть.

Моя проблема возникает при попытке вызвать astar запрос к базе данных (т. Е. Вторая строка метода). Я получаю следующую ошибку: OCommandSQLParsingException: Error parsing query при достижении первой ( (т. Е. Ошибка, связанная с открытой скобкой). Полное удаление скобок просто привело к той же ошибке, возникающей # перед первым @rid значением.

Кажется, я не могу найти ни одного примера использования этой функции на практике, и (по крайней мере, я думаю) я использую вызов функции, как это предложено в документации. С нетерпением ждем ваших мыслей.

Я использую самую последнюю версию OrientDB: 3.2.3

Ответ №1:

Оказывается, ошибка не имеет ничего общего с самой скобкой. "direction='OUT'" "customHeuristicFormula='EUCLIDEAN'" Проблема заключалась в передаче параметров and как части строки. Приведенный ниже блок сделал свое дело.

     String sql = "SELECT ASTAR("   getNode(from).getProperty("@rid")   ", "   getNode(to).getProperty("@rid")   ", time) FROM V";
    try(OResultSet set = db.query(sql, "direction='OUT'", "customHeuristicFormula='EUCLIDEAN'")) {
         // some code...
    }