我使用的是neo4j 2.1.4。 我有节点 - POINT和关系 - ROAD 我有ROAD属性索引 - OBJ_COD
:schema ls -l :ROAD
Indexes
ON :ROAD(OBJ_COD) ONLINE
ON :ROAD(ID) ONLINE
No constraints
我想通过OBJ_COD值搜索ROAD,但是cypher不会使用索引来查找关系。
neo4j-sh (?)$ profile MATCH (a)-[r:`ROAD` {ID:333275}]-(b:`POINT`) RETURN r LIMIT 1;
ColumnFilter
|
+TraversalMatcher
+------------------+------+---------+-------------+----------------+
| Operator | Rows | DbHits | Identifiers | Other |
+------------------+------+---------+-------------+----------------+
| ColumnFilter | 2 | 0 | | keep columns r |
| TraversalMatcher | 2 | 2265843 | | a, r, a |
+------------------+------+---------+-------------+----------------+
如何强制cypher使用现有索引来搜索单个关系?
答案 0 :(得分:4)
架构索引仅在节点上可用。对关系建立索引的需求几乎总是在图形数据建模中揭示问题。通常,您使用索引来查找图遍历的起点。良好的建模实践是,您域中的任何内容都是thing
或entity
应该是一个节点,并且该关系将您的things
置于语义上下文中。如果您遵循此操作并且查询从something
开始,则不需要建立索引关系。
然而,在一些罕见的情况下,关系索引可能是一个有效的选择。在这种情况下,您需要回退使用遗留索引来建立关系。请查看fine documentation以了解其运作方式。