我有一個包含多個節點的數據集,所有這些節點都標記爲claim
,它們可以具有各種屬性(名稱P1
,P2
等,通過P2000
)。目前,claim
節點中的每一個節點可以僅具有這些屬性中的一個,並且每個屬性具有可以是不同類型的值(即,P1
可以是字符串,P2
可以是浮點型,P3
整數等)。我還需要能夠通過任何屬性查找節點(即"find all nodes with P3 which equals to 42"
)。Neo4j中可以接受混合類型索引嗎?
我已經將它建模爲具有屬性value
並根據P屬性標籤的節點。然後我在標籤claim
和屬性value
上定義模式索引。查找然後看起來像這樣:
MATCH (n:P569:claim) WHERE n.value = 42 RETURN n
我的第一個問題是 - 這是好的有這樣的索引?是否允許混合類型索引?
第二個問題是,上述工程查找(雖然我不知道它是否使用索引或沒有),但是這不 - 注意標籤順序切換:
neo4j-sh (?)$ MATCH (n:claim:P569) WHERE n.value>0 RETURN n;
IncomparableValuesException: Don't know how to compare that. Left: "113" (String); Right: 0 (Long)
P569
性質都是數字,但其他P值的字符串屬性是其中一個是「113」。不知何故,即使我說的標籤應當是既要求和P569,在「113」值仍包含在比較中,即使它沒有P569標籤:
neo4j-sh (?)$ MATCH (n:claim) WHERE n.value ="113" RETURN LABELS(n);
+-------------------+
| LABELS(n) |
+-------------------+
| ["claim","P1036"] |
| ["claim","P902"] |
+-------------------+
這裏有什麼問題 - 爲什麼它的工作原理有一個標籤順序但不是另一個?這個數據模型可以改進嗎?
如果你想比較它們,你還可以在屬性或toInt()上使用toString()。索引可以有混合類型。您還可以使用'USING INDEX n:claim(value)'添加索引提示。在一個索引中,我認爲這些值主要是以類似的格式(或字符串)存儲的 – 2015-02-13 01:30:27