如何通过ActiveGraph获取Neo4j最短路径查询的length值?
解决思路
方法1:修改Cypher直接返回长度
直接在查询语句中显式返回路径长度,避免后续解析路径对象的麻烦:
MATCH (start:`Neo4j::Record` {record_id: 1547}), (end:`Neo4j::Record` {record_id: 1850}) MATCH p=shortestPath((start)-[:`NEO4J::RECORD_ASSOCIATION`*]->(end)) RETURN p, length(p) AS path_length
执行查询后,结果中会直接包含path_length字段,可直接读取:
result = ActiveGraph::Base.query(modified_query).to_a result.each do |record| puts "路径长度: #{record[:path_length]}" end
方法2:从返回的路径对象中提取长度
如果不想修改Cypher,可从返回的路径对象中调用length方法获取长度。注意需要先将InternalResult转换为可遍历的集合,再提取路径对象:
result = ActiveGraph::Base.query(original_query).to_a result.each do |record| path = record[:p] path_length = path.length puts "路径长度: #{path_length}" end
Neo4j的路径对象本身内置了length属性,只是需要先从查询结果记录中取出路径对象才能访问。
注意事项
- 若使用较旧版本的ActiveGraph,可能需要用
size替代length,可根据实际版本调整方法名。 - 调用
to_a是将InternalResult转换为数组,方便遍历处理每条记录。
内容的提问来源于stack exchange,提问作者knirirr
相关产品推荐
相关产品推荐

