【问题标题】:How to use relationship index in Cypher如何在 Cypher 中使用关系索引
【发布时间】:2014-11-10 09:11:30
【问题描述】:

我使用的是 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,但密码不使用索引来查找关系。

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 使用现有索引来搜索单个关系?

【问题讨论】:

    标签: graph neo4j cypher


    【解决方案1】:

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

    但是,在极少数情况下,关系索引可能是一种有效的选择。在这种情况下,您需要回退以使用旧索引来建立关系。查看fine documentation 以了解它们的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2013-10-05
      相关资源
      最近更新 更多