2013-04-30 39 views
1

可以說我有以下數據模型:春數據的Neo4j - 索引和繼承

public class A { 

    @Indexed(indexType = IndexType.FULLTEXT, indexName = "property1") 
    String property1; 
} 

public class B extends A { 

    @Indexed(indexType = IndexType.FULLTEXT, indexName = "property2") 
    String property2; 
} 

我可以告訴大家一個不同的索引名下的Spring框架的B類指數property1? 如果不是,你會在這種情況下做什麼?我的意思是,如果你有幾個類都擴展了相同的基類,那麼你會怎麼做,但是同時,這些類繼承的所有屬性都應該被編入索引。我只能在基類中註釋這些屬性以進行索引,並且這是非常有限的。我能做什麼?

謝謝。

+0

你選擇了哪種方法?如果您使用過,請批准其中一個答案。 – tstorms 2013-05-07 12:50:12

+0

我實際上還在玩它,這就是爲什麼我仍然不接受答案。今天我會更深入地介紹Level.INSTANCE的建議,看看它是否真的回答我的需求,因爲正如我寫的,當我最後一次嘗試時,我沒有看到任何影響。我會接受今晚或明天的答案之一。 – gipouf 2013-05-07 13:02:04

回答

0

我不認爲這是可能的。您的property1將始終在索引property1中編入索引。能夠在單個字段上指定多個索引可能會解決您的問題,但目前不可能。前段時間,我爲此提出了an issue,但尚未實施。

如果你真的想要一個域(實體)對象的方法,你也可以選擇domain entity approach。它與Spring或Spring Data Neo4j沒有關係,但它也有訣竅。通過這種方式手動處理實體,您也可以自己管理索引,從而獲得所需的所有靈活性。

只是一個問題,你爲什麼要爲每個子類指定一個不同的索引?

+0

至於你的最後一個問題 - 也許我錯過了一些東西,但我需要它,以便能夠在B類的property2上進行查找,以便查找將僅限於B類實例/節點。也許有另一種方式來完成我想要的? – gipouf 2013-04-30 14:02:55

+0

您可以在所有屬性上使用相同的索引。 Lucene查詢可能像「property2:a_certain_value」。在例如Cypher這看起來像START n =節點:your_index(「property2:a_certain_value」)返回n – tstorms 2013-04-30 14:07:13

+0

但在我的情況下,名爲「property2」的索引將保存A類和B類的實例或任何其他繼承類來自A,因爲在所有這些類中,property2與名爲「property2」的索引相關。 我希望每個類的屬性2將使用不同的索引,所以我可以分別查找每種類型的實例,並保持整潔的OOP設計。 – gipouf 2013-04-30 14:14:09

2

索引定義註釋中的level屬性可以設置爲Level.INSTANCE。如需更多幫助,請參閱彈簧數據的Neo4j文檔here

下面是從文檔的摘錄:

如果一個字段是在父類定義但需要 子類不同的索引, level屬性聲明將使用 作爲索引。 Level.CLASS使用聲明字段的類和 Level.INSTANCE使用提供的類或實際實體 實例。

+0

我試過使用它,但我沒有看到任何區別,它看起來像索引仍然在課堂級別。一個小例子如何使用它,除了使用LEVEL屬性擴展註釋之外,我是否缺少了一些東西?我無法在文檔中獲得更多信息 – gipouf 2013-04-30 19:51:20

+0

是的,幾乎沒有任何示例可以找到它的用法。討論似乎有一個提及http://forum.springsource.org/showthread.php?120071-Inheritance-in-spring-data-neo4j – Gopi 2013-05-01 02:43:55