Я использую Neo4j для поиска пользователей, которые находятся в радиусе 50 км и доступны в определенные дни.
Этот вопрос похож на этот другой вопрос, но индексы изменились начиная с Neo4J 2.0 решение не работает.
Я использую Neo4j 2.2.1, Neo4j-spatial 0.14 и py2neo/py2neo-spatial для взаимодействия с графиком.
Чтобы добавить пользовательские геометрии на график, я использую:
def create_geo_node(graph, node, layer_name, name, latitude, longitude):
spatial = Spatial(graph)
layer = spatial.create_layer(layer_name)
node_id = node._id
shape = parse_lat_long(latitude, longitude)
spatial.create_geometry(geometry_name=name, wkt_string=shape.wkt, layer_name="Users", node_id=node_id)
.. который создает пространственные узлы по желанию.
Затем я хотел бы запросить график, выполнив:
START user=node:Users('withinDistance:[4.8,45.8,100]')
MATCH period=(start_date:Date)-[:NEXT_DAY*]->(end_date:Date)
WHERE start_date.date="2014-03-03" AND end_date.date="2014-03-04"
UNWIND nodes(period) as nodes_in_period
OPTIONAL MATCH (nodes_in_period)<-[a:AVAILABLE]-(user:User)
RETURN user.uuid, count(a)/count(nodes(period))
но запрос возвращает:
Index `Users` does not exist
Кажется, что py2neo space.create_layer(..) создает слой, но не индекс (но должен ли он? .. поскольку индексы теперь являются «наследием» Neo4j 1. *)
Использование пространственного find_within_distance py2neo работает, но, поскольку он использует REST API, я не могу делать смешанные запросы, которые учитывают другие параметры.
Насколько я понимаю, START устарел, начиная с Neo4j 2.0, но я не могу найти правильный запрос Cypher для withinDistance в Neo4j 2.2.
Заранее спасибо,
Бенджамин
create_layer
не создает типичный индекс Neo - он создает граф, который затем можно использовать для эффективного выполнения запросов пространственного типа на связанных узлах приложения. Вам никогда не придется беспокоиться об этом индексе. - person noisyboiler   schedule 12.06.2015