Так как вы в основном ищете сильнейшего в самой короткой длине. Вы можете обойти проблему производительности с помощью хитрости. Вы можете запросить график с фиксированной длиной, чем переменной длины. Но вы должны запросить n2-n1 + 1 раз, в вашем случае 4 раза, сначала длиной 4, а затем 5 и так далее. Вы можете прекратить запрашивать, если вы найдете путь в любой точке. Этот подход значительно уменьшит объем данных, загружаемых каждый раз. Но вы должны попасть в график несколько раз. Скорее всего, среднее время, затрачиваемое на четыре подхода, будет меньше, чем одно попадание с переменной длиной. Причина в том, что вы не рассчитываете все пути большей длины, если найдете решение меньшей длины. Так как, чем дольше длится путь, затраченное время будет расти в геометрической прогрессии.
Это невозможно только при использовании шифра. Один из способов - написать процедуру neo4j в java и использовать ее в запросе шифра. Второй способ: нажать neo4j, используя другой запрос. я пишу python код для вашего случая здесь,
query = 'MATCH path = (startN:Batch { name: $startNode })-[:CHANGES_TO*LENGTH_PARAM]->(endN:Batch { name: $endNode })
RETURN path,
REDUCE (s = 1, r IN RELATIONSHIPS(path) | s * r.rateValue) AS finalBatchValue
ORDER BY finalBatchValue DESC
LIMIT 1'
for length in range(4,8):
query = query.replace('LENGTH_PARAM',str(x))
result = graph.run(query)
#if result size > 0
#your implementation
#final_result= result['path']
#return final_result
Вот как это работает, здесь, в худшем случае, вам нужно нажать четыре раза на график для каждой пары начальных и конечных узлов. Сетевые вызовы увеличиваются, но среднее время ожидания должно быть уменьшено.
С помощью плагинов java оно может быть уменьшено до одного нажатия, как в предыдущем запросе, так как вы можете выполнить часть l oop внутри java код