2015-03-30 59 views
2

根據新的索引規則,auto_index將在未來消失,並且預計將使用cypher創建索引。按照這種新方法,爲了索引一個節點屬性,你必須提供一個節點標籤。所有節點上的密碼索引公共屬性

我有一個「節點ID」屬性存在於所有類型的節點標籤的 - 用戶,員工,銀行,汽車等我到自動索引中使用該屬性檢索任何類型的節點,如果它的節點ID是已知的。請注意,由於自動索引不需要我提供節點標籤,因此我可以做我所做的。

ReadableIndex<Node> readableIndex = this.graphDatabaseService.index().getNodeAutoIndexer().getAutoIndex(); 
readableIndex.get("nodeId", "0").getSingle(); 

但是,對於新的樣式,我必須爲每個節點標籤的nodeId屬性創建索引。所以,我必須這樣做:

create index on :User(nodeId) 
create index on :Employee(nodeId) 
... 

而且,我的方法getByNodeId(String nodeId)現在是無用的,因爲這個暗號查詢恕我直言,將不能再使用索引,因爲我不傳遞任何節點標籤。

match (node) where node.nodeId = {nodeId} return node; 

因爲我getByNodeId()方法整點是要在所有節點通用的,我不能給這個暗號查詢節點標籤。那麼我應該在這裏做什麼。我的2個問題是:

  • 如何通過暗號告訴Neo4j的索引所有節點上的標籤
  • 我如何寫一個使用不是基於節點的標籤上,但基於節點的性能指標一個暗號查詢。

注:

  • 對我來說,因爲我使用的Neo4j-JDBC 和使用暗號,他們沒有方法來創建自動索引或訪問 自動索引是很重要(至少不是我所知道的)。

  • 有些人可能會建議我改變neo4j.properties使 自動索引,但我不喜歡更改配置文件。 I 想在我的程序中做到這一點。無論如何,這隻會解決 的第一個問題。第二個問題仍然存在。

+0

謝謝問這個!我正要問完全一樣的東西。 – ADTC 2016-05-12 02:41:40

回答

3

節點可以有多個標籤。

因此,如果你把所有節點共享一個共同的標籤,說Base(除了任何標籤,他們目前都有),你可以擁有覆蓋所有節點的單個指標:

CREATE INDEX ON :Base(nodeId) 
+0

這絕對是一個很好的答案。但是真的沒有其他辦法了嗎?這是爲什麼 - 我有三種不同的數據庫風格 - neo4j嵌入和休息,泰坦。我希望他們都具有相同的圖形結構,因爲它可以幫助我保持簡單。我不想偏離3個數據庫的一致性,直到我真的必須這樣做。雖然你的回答很有意義,但有多個標籤是Titan不支持的。因此,如果沒有其他方法,我只會使用它。希望這是有道理的。:) – Rash 2015-03-31 02:44:57

+0

您可以省略non-neo4j DB中的共享標籤。除此之外,結構應該是一樣的。 – cybersam 2015-03-31 05:51:41

+0

謝謝!一些不必要的工作必須在所有節點上創建一個標籤(以任何方式使其自動?),但它可以完成工作。 – ADTC 2016-05-12 02:40:55