neo4j包含schema indexes 和 legacy indexes兩種類型,二者理念不一樣且不可互換或兼容,實際應用中應明確檢索需求後採用合適的索引。html
參考neo4j index-confusionnode
schema index和legacy index 都是基於lucene實現;git
若是你正在使用Neo4j 2.0或者更高版本而且不須要支持2.0版本以前legacy index的代碼,那麼請只使用schema index同時避免legacy index;github
若是你不得不使用Neo4j的早期版本,而且沒法升級,不管如何你都只有一種索引能夠選擇(legacy index);sql
若是你須要全文檢索的索引,無論是什麼版本,都將使用legacy index。spa
`Neo4j is a schema-optional graph database. You can use Neo4j without any schema. Optionally you can introduce it in order to gain performance or modeling benefits.
This allows a way of working where the schema does not get in your way until you are at a stage where you want to reap the benefits of having one.`code
在Neo4j 2.0版本以前,Legacy index被稱做indexes。這個索引是在graph外部經過Lucene實現,容許「節點」和「關係」以鍵值對的形式被檢索。從Neo4j 提供的REST接口來看,被稱做index
的變量一般是指Legacy indexes;orm
Legacy index可以提供全文本檢索的能力。這個功能並無在schema index中被提供,這也是Neo4j 2.0* 版本保留legacy indexes的緣由之一。htm
create index on :Node(property),會對指定label property的全部node新建index ,index新建成功後,當graph更新時index會自動更新,index默認存儲在根目錄的/schema/index/lucene目錄;
如:索引
# 新建索引 CREATE INDEX ON :AddressNode( preAddressNodeGUIDs) # 刪除索引 DROP INDEX ON :AddressNode(_id)
schema index存儲方式爲複合索引(Compound Index),除了段信息文件,鎖文件,以及刪除的文件外,其餘的一系列索引文件壓縮一個後綴名爲cfs的文件,即全部的索引文件會被存儲成一個單例的Directory,
此方式有助於減小索引文件數量,減小同時打開的文件數量,從而獲取更高的效率。好比說,查詢頻繁,而不常常更新的需求,就很適合這種索引格式。
參數 | 值 | 描述 |
---|---|---|
type | exact, fulltext | exact採用Lucene keyword analyzer是默認配置. fulltext採用white-space tokenizer in its analyzer. |
to_lower_case | true, false | type=fulltext時生效,在新建索引和查詢時會自動進行字母的大小寫轉換,默認爲小寫 |
analyzer | Analyzer類全名 | 自定義Lucene Analyzer,注意:to_lower_case配置會默認將查詢參數轉換爲小寫.若是自定義analyzer索引寫入的字母爲大寫,查詢結果將會不匹配 |
分exact和fulltext兩類,二者可結合使用,可新建relationship索引,默認存儲在根目錄的index/lucene目錄;
fulltext索引新建方式參考筆記Neo4j中實現自定義中文全文索引
注意:使用legacy index查詢每每須要一個start node;
legacy index採用非複合索引,更靈活,能夠單獨的訪問某幾個索引文件
參考:https://dzone.com/articles/indexing-neo4j-overview
Neo4j不支持聯合索引,可採用拼接字段實現
Neo4j 3.0開始支持聯合索引,但須要升級至JDK8
https://github.com/neo4j/neo4j/issues/6841