我可以在cypher中创建具有多个属性的索引吗?
我的意思是
CREATE INDEX ON :Person(first_name, last_name)
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这是不可能的,但如果我想编写如下查询:
MATCH (n:Person)
WHERE n.first_name = 'Andres' AND n.last_name = 'Doe'
RETURN n
Run Code Online (Sandbox Code Playgroud)
这些指数有意义吗?
CREATE INDEX ON :Person(first_name)
CREATE INDEX ON :Person(last_name)
Run Code Online (Sandbox Code Playgroud)
或者我应该尝试在一个属性中合并"first_name"和"last_name"?
谢谢!
Ken*_*ani 10
索引适用于定义映射到某个值或值集的某些键.关键始终是单一维度.
考虑你的例子:
CREATE INDEX ON :Person(first_name)
CREATE INDEX ON :Person(last_name)
Run Code Online (Sandbox Code Playgroud)
现在,这两个索引将映射到具有相同名字的人员,并分别映射具有相同姓氏的人员.因此,对于数据库中的每个人,都会创建两个索引,一个在名字上,另一个在姓氏上.
从统计上来说,这个例子很臭.为什么?因为分布是随机的.您将创建许多映射到数据库中的小群集/人群的索引.您将为JOHN第一个名称编制许多索引节点.同样,你会SMITH为姓氏索引很多节点.
现在,如果要索引用户的全名,则连接,形成JOHN SMITH.然后,您可以将person的属性设置为person.full_name.虽然它是多余的,但它允许您执行以下操作:
创建
CREATE INDEX ON :Person(full_name)
Run Code Online (Sandbox Code Playgroud)比赛
MATCH (n:Person)
USING INDEX n:Person(full_name)
WHERE n.full_name = 'JOHN SMITH'
Run Code Online (Sandbox Code Playgroud)您可以随时参考http://docs.neo4j.org/refcard/2.0/获取更多提示和指南.
干杯,
肯尼