如何在Cypher中使用关系索引

NIz*_*kov 5 graph neo4j cypher

我正在使用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
Run Code Online (Sandbox Code Playgroud)

我想通过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 |
+------------------+------+---------+-------------+----------------+
Run Code Online (Sandbox Code Playgroud)

如何强制密码使用现有索引来搜索单个关系?

Ste*_*ter 4

模式索引仅在节点上可用。对关系建立索引的需求几乎总是会揭示图形数据建模中的问题。通常,您使用索引来查找图形遍历的起点。良好的建模实践是,领域中的任何内容都是thingentity应该是节点,并且这种关系将您置于things语义上下文中。如果您遵循此操作并且您的查询从 开始,something则不需要索引关系。

然而,在极少数情况下,关系索引可能是一个有效的选择。在这种情况下,您需要回退到使用关系的旧索引。查看相关的详细文档以了解它们的工作原理。