Neo4J:如何从路径集合中查找唯一节点

Neo4J:如何从路径集合中查找唯一节点,neo4j,cypher,Neo4j,Cypher,我正在使用neo4j解决一个实时规范化问题。假设我有来自两个不同来源的3个地方。1 source45为我提供了两个相互重复的位置,1 source55为我提供了一个正确的标识符。但是,对于任何位置标识符(重复或不重复),我希望找到由提要标识符唯一的最近位置集。我的数据如下所示: CREATE (a: Place {feedId:45, placeId: 123, name:"Empire State", address: "350 5th Ave", city: "New York", stat

我正在使用neo4j解决一个实时规范化问题。假设我有来自两个不同来源的3个地方。1 source
45
为我提供了两个相互重复的位置,1 source
55为我提供了一个正确的标识符。但是,对于任何位置标识符(重复或不重复),我希望找到由提要标识符唯一的最近位置集。我的数据如下所示:

CREATE (a: Place {feedId:45, placeId: 123, name:"Empire State", address: "350 5th Ave", city: "New York", state: "NY", zip: "10118" })
CREATE (b: Place {feedId:45, placeId: 456, name:"Empire State Building", address: "350 5th Ave", city: "New York", state: "NY"})
CREATE (c: Place {feedId:55, placeId: 789, name:"Empire State", address: "350 5th Ave", city: "New York", state: "NY", zip: "10118"})
我已经通过匹配节点连接了这些节点,所以我可以对数据进行一些规范化。例如:

MERGE (m1: Matching:NameAndCity { attr: "EmpireStateBuildingNewYork", cost: 5.0 })
MERGE (a)-[:MATCHES]-(m1)
MERGE (b)-[:MATCHES]-(m1)
MERGE (c)-[:MATCHES]-(m1)
MERGE (m2: Matching:CityAndZip { attr: "NewYork10118", cost: 7.0 })
MERGE (a)-[:MATCHES]-(m2)
MERGE (c)-[:MATCHES]-(m2)
当我想从起始位置id中找到最接近的匹配时,我可以在起始节点的所有路径上运行匹配,按成本排序,即:

MATCH p=(a:Place {placeId:789, feedId:55})-[*..4]-(d:Place)
WHERE NONE (n IN nodes(p)
        WHERE size(filter(x IN nodes(p)
                          WHERE n = x))> 1)
WITH    p,
        reduce(costAccum = 0, n in filter(n in nodes(p) where has(n.cost)) | costAccum+n.cost) AS costAccum
        order by costAccum
RETURN p, costAccum
但是,由于同一位置有多条路径,因此在这样查询时,我会多次复制同一个节点。是否可以收集节点及其成本,然后只返回一个不同的子集(例如,从feed
45
55
中为我提供最佳结果)

我怎样才能返回一组不同的路径,按成本排序,按提要标识符唯一?我构造这种类型的问题是错误的吗


请帮助!

您可以收集每个位置d的所有路径,然后选择每个集合中的最佳路径(因为它们将被排序然后收集)


你能用?提供一个更完整的样本图吗?不完全确定你想要什么,但你知道“订单依据”和“不同”(和)?
MATCH p=(a:Place {placeId:789, feedId:55})-[*..4]-(d:Place)
WITH d, collect(p) as paths,
        reduce(costAccum = 0, n in filter(n in nodes(p) where has(n.cost)) | costAccum+n.cost) AS costAccum
        order by costAccum
RETURN head(paths) as p, costAccum