Neo4j索引筆記之SchemaIndex和LegacyIndex

neo4j包含schema indexes 和 legacy indexes兩種類型,二者理念不一樣且不可互換或兼容,實際應用中應明確檢索需求後採用合適的索引。html

schema index vs legacy index

參考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

schema index(schema based indexes)

`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,
此方式有助於減小索引文件數量,減小同時打開的文件數量,從而獲取更高的效率。好比說,查詢頻繁,而不常常更新的需求,就很適合這種索引格式。

legacy index

Neo4j Legacy Index配置參數

參數 描述
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採用非複合索引,更靈活,能夠單獨的訪問某幾個索引文件

Neo4j聯合索引

參考:https://dzone.com/articles/indexing-neo4j-overview
Neo4j不支持聯合索引,可採用拼接字段實現

Neo4j 3.0開始支持聯合索引,但須要升級至JDK8
https://github.com/neo4j/neo4j/issues/6841

相關文章
相關標籤/搜索