我有users
和groups
他们所属的人。
我有一个索引n:组(名称)
我想搜索属于一组群组的所有用户:[“gr1”,“gr2”,“gr3”]
他们所属的其他群体。
所以我有以下查询: 查询:
MATCH (gr:Group) <--(us:User)--(gr2:Group)
WHERE gr.name in ["gr1","gr2"]
return distinct gr2
这里的问题是,我认为cypher不使用索引,因为查询会变慢。
我有2k节点,50k关系。 以下查询需要200到700毫秒(取决于缓存):
MATCH (gr:Group) <--(us:User)--(gr2:Group)
WHERE gr.name = "gr1"
return distinct gr2
但是,以下查询需要2到6秒!
MATCH (gr:Group) <--(us:User)--(gr2:Group)
WHERE gr.name in ["gr1"]
return distinct gr2
当我想要做的时候:
MATCH (gr:Group) <--(us:User)--(gr2:Group)
using index gr:Group(name)
WHERE gr.name in ["gr1"]
return distinct gr2
我收到以下错误:
Cannot use index hint in this context. The label and property comparison must be specified on a non-optional node
Label: `Group`
Property name: `name`
(用“=”代替“in”我没有错误)
我正在使用neo4j enterprise 2.0.1。测试结果来自neo4j浏览器。
答案 0 :(得分:3)
当您在(gr:Group {name: "gr1"})
中指定模式中的属性或调用WHERE gr.name = "gr1"
时,可以引用索引。在您可以使用多个attrib值的情况下,您可以使用OR
子句。
MATCH (gr:Group) <--(us:User)--(gr2:Group)
WHERE gr.name="gr1" OR gr.name="gr2"
return distinct gr2