1. 创建索引
给 Label 为 Person 的节点的 name 属性上创建索引,CQL语句如下所示:
CREATE INDEX ON :Person(name)
运行截图如下所示:
重复执行上述CQL语句,再次创建索引,不会报错,但是没有再创建索引。
2. 删除索引
删除刚才创建的索引,CQL语句如下所示:
DROP INDEX ON :Person(name)
运行截图如下所示:
删除成功后,再次删除索引会报错:Neo.DatabaseError.Schema.IndexDropFailed: Unable to drop index on :Person(name): No such INDEX ON :Person(name)。
3. 使用索引
索引创建完成后,在查询的时候会自动使用索引,列出一些CQL语句,这些语句在执行的时候会自己去调用索引。
MATCH (person:Person { name: 'Keanu Reeves' })
RETURN person
MATCH (person:Person)
WHERE person.name > 'A'
RETURN person
MATCH (person:Person)
WHERE person.name IN ['Keanu Reeves', 'Aaron Sorkin']
RETURN person
MATCH (person:Person)
WHERE person.name STARTS WITH 'A'
RETURN person
MATCH (p:Person)
WHERE exists(p.name)
RETURN p
4. 查询创建的索引
执行如下语句。
:schema
查询结果如图所示。
5. Neo4j 索引的底层实现
有人说是 es,全名应该是Elasticsearch,http://neo4j.com.cn/topic/5bbb00b5d8765793343141a3。
上面讲是索引底层用的ES的是错误的,感谢 gq2016 的指教。
看了下Neo4j用户手册,Neo4j支持的是 B+树索引和全文索引。官方文档连接:https://neo4j.com/docs/operations-manual/current/performance/index-configuration/
B+树索引介绍:https://neo4j.com/docs/operations-manual/current/performance/index-configuration/#index-configuration-btree
全文索引介绍,使用的是 Apache Lucene:https://neo4j.com/docs/operations-manual/current/performance/index-configuration/#index-configuration-fulltext