Neo4j - ближайший сосед узла из набора узлов определенного типа - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я импортировал график дорожной карты в Neo4j, и я хотел бы выполнить некоторые запросы к нему. Есть перекрестки, обозначенные как вершины, и дороги, обозначенные как отношения. Кроме того, есть интересные места, которые отображаются на перекрестке, используя отношения. Вот пример графика (не моя картинка, но мой график выглядит аналогично): https://github.com/evagian/California-road-network-NEO4J-CYPHER-graph-and-queries/blob/master/images/6.png

Чего я хотел бы достичь, так это найти для одного перекрестка ближайших соседей из каждого типа POI (например, ресторан, кафе ...). Я попытался использовать алгоритм кратчайшего пути (см. Ниже), но он работает очень долго, и мне нужно сделать это для каждого перекрестка на карте (у меня около 500 000):

MATCH (a:CROSSROAD)-[k:HAS_POI]->(o:POI {id: 10, type: "coffee_shop"})
MATCH (c:CROSSROAD)-[h:HAS_POI]->(p:POI {type: "restaurant"})
CALL algo.shortestPath(a, c, 'distance')
YIELD totalCost
RETURN p.id as POI, totalCost
ORDER BY totalCost
limit 1

Есть ли лучший и быстрый способ сделать это?

Интересно, есть ли способ пройти от узла, взяв наименьшее расстояние в отношении ROAD, пока не будет достигнут POI от определенного типа. Хотя я не уверен, как выразить это на языке Cypher.

PS: я новичок в Neo4j и Cypher, и я все еще учусь, поэтому извините, если это очевидный вопрос.

...