Neo4j索引(使用lucene)如何在引擎盖下工作?

时间:2014-10-29 17:00:04

标签: lucene neo4j

关于Neo4j中lucene索引的一些问题以及它们在查询和遍历期间的使用方式。基本上,关系存储在磁盘上的方式(链表),在我看来,任何图遍历都需要顺序访问节点的所有关系 - 不确定在这种情况下如何使用索引。更具体地说:

1)当节点属性被编入索引时,如何将其用于查询,例如“所有我的朋友的女性朋友”(性别被编入索引)。通过首先找到所有朋友的朋友,然后向lucene提交查询以获取所有女性,我看到索引被使用的唯一方法。它比仅仅在内存中进行比较更快吗?

2)当关系属性被编入索引时。由于关系存储在链表中,因此如果不顺序遍历列表,则无法获得节点的关系子集。我想我们总是可以使用node_ids索引关系,但这看起来很愚蠢 - 我们最终在lucene和Neo4J中存储邻接列表

1 个答案:

答案 0 :(得分:3)

索引不用于遍历。

它们仅用于在图表中找到您的起点。

根据关系类型和方向,您只能遍历节点的关系子集。

对于您的查询1,您不需要性别索引,因为它会返回图表中大约50%的人。但是你会使用索引进行初始用户查找(我)

创建索引:用户(名称);

MATCH(m:用户{姓名:"我"}) - [:FRIEND] - >(其他:用户) 在哪里.gender ="女性" 返回其他;

2)是的,你是对的。

你可以做到这一点,但只有当你拥有很多的关系(数百万)并想要访问其中的一小部分时才有必要。

因此,如果这是您的用例,那么关系索引可能有所帮助。 实际上,关系用node-id和relationship-property

编制索引