2014-08-27 392 views
2

我有一個具有以下結構的neo4j圖。Neo4j關係索引 - 在關係屬性上搜索

(賬戶)--- [交易] ---(賬戶)

事務是Neo4j的關係和帳戶是一個節點。

在每筆交易中設置了各種屬性,例如交易ID,金額,日期和各種其他銀行信息。

我可以通過帳戶ID進行搜索,並且返回正常。但是,當我通過事務ID進行搜索時,neo4J將搜索整個圖而不是使用索引,並且搜索失敗。

我使用org.neo4j.unsafe.batchinsert.BatchInserterImpl.createDeferredSchemaIndex()爲Account.number和Transaction.txid創建索引。該索引似乎適用於帳戶(節點)搜索,但不適用於交易(關係)搜索。 (我也啓用節點和關係的自動索引,但它並沒有改變的東西)

我在考慮索引關係屬性不支持,因此考慮使中間節點來保存屬性信息。但是,如果可能的話,我寧願堅持我原來的設計。

任何想法如何進行?

回答

4

您可以使用legacy indexes或來索引關係。架構索引不支持索引關係。

原因是:通常情況下,您使用使用節點來爲您的域中#個#或#個實體#建模。關係連接你的世界並將節點放入語義環境中。當遵循這個模型時,你通常不需要索引關係,因爲你的查詢總是從始終是節點的#thing#開始。

在你的模型,你應該重新思考造型,我想這可能是有意義的有

(account)-[:send]->(transaction)-[:to]->(account). 

所以交易是在它自己的事情,並因此成爲節點。

+0

嗨,這就是我懷疑的。只是爲了確認,它不支持從cypher查詢遺留索引,對吧? – Imme22009 2014-08-28 08:45:15

+1

當然,您可以使用start子句在cypher中查詢遺留索引:對於autoindex,使用'START r = relationship:relationship_auto_index(key ='value')return r',對於普通的遺留索引:'start r = relationship: (key ='value')...' – 2014-08-28 10:37:15

+0

謝謝,我會嘗試一個 – Imme22009 2014-08-28 17:25:44