Neo4j查询中的何处

Neo4j查询中的何处,neo4j,cypher,Neo4j,Cypher,我是相对于n00b的graph DB,一直在玩Neo4j(通过Ruby ActiveRecord,但我认为这并不重要),非常喜欢它,但发现了一些违反直觉的行为 我的问题涉及从数据库中获取一些数据,将其拉回到Ruby代码中,进行一些处理,然后使用此外部处理识别的ID集进行第二次查询(在数据库中执行此操作太复杂)。结果是一个ActiveRecord查询,如 Foo.where(foo_id: foo_ids)... MATCH (foo:Foo) WHERE foo.foo_id IN [1, 5

我是相对于n00b的graph DB,一直在玩Neo4j(通过Ruby ActiveRecord,但我认为这并不重要),非常喜欢它,但发现了一些违反直觉的行为

我的问题涉及从数据库中获取一些数据,将其拉回到Ruby代码中,进行一些处理,然后使用此外部处理识别的ID集进行第二次查询(在数据库中执行此操作太复杂)。结果是一个ActiveRecord查询,如

Foo.where(foo_id: foo_ids)...
MATCH (foo:Foo) WHERE foo.foo_id IN [1, 5, ...] ...
这转化为一个密码查询,比如

Foo.where(foo_id: foo_ids)...
MATCH (foo:Foo) WHERE foo.foo_id IN [1, 5, ...] ...

ID集比较大,只有几万个,我发现这个查询非常慢。
foo_id
有一个独特的约束,我在RDBMS中的经验告诉我不应该这样。这只是事情的一种方式,还是我不知道正确的“图形化”做事方式?

您需要在foo\u id上创建索引。 之后,不再签入数组 您可以展开该数组并进行如下匹配

UNWIND [1,4,5,.....] as id 
MATCH (foo : Foo{foo_id:id}) 
RETURN foo 

您需要在foo_id上创建索引。 之后,不再签入数组 您可以展开该数组并进行如下匹配

UNWIND [1,4,5,.....] as id 
MATCH (foo : Foo{foo_id:id}) 
RETURN foo 

啊,很好——我想我的
foo_id
应该已经有了索引,因为有约束,对吧?(至少当我尝试应用约束时,我在“索引已存在”上得到了一个错误,并且在删除索引并添加约束后,我看到括号中有一个带有“from constraint”的索引)。谢谢约束隐式地创建索引..所以你很好啊,很好--我认为我的
foo_id
应该已经有了一个索引,因为约束,对吧?(至少当我尝试应用约束时,我在“索引已存在”上得到了一个错误,并且在删除索引并添加约束后,我看到括号中有一个带有“from constraint”的索引)。谢谢约束隐式地创建索引..这样就可以了