【问题标题】:Spring Data Neo4j - Indexing and InheritanceSpring Data Neo4j - 索引和继承
【发布时间】:2013-04-30 12:45:14
【问题描述】:

假设我有以下数据模型:

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 吗? 如果没有,在这种情况下你会怎么做?我的意思是,如果你有几个类都扩展同一个基类,但同时,这些类从基类继承的所有属性都应该被索引,你会怎么做。我只能在基类中注释这些属性以进行索引,这是非常有限的。我能做什么?

谢谢。

【问题讨论】:

  • 您选择了哪种方法?如果您使用过其中一个答案,请批准它们。
  • 我实际上还在玩它,这就是为什么我仍然没有接受答案。今天我将更深入地了解 Level.INSTANCE 建议,看看它是否真的满足了我的需求,因为正如我所写的,我上次尝试它时没有看到任何影响。今晚或明天我会接受其中一个答案。

标签: spring neo4j spring-data-neo4j


【解决方案1】:

索引定义注解中的level属性可以设置为Level.INSTANCE。如需更多帮助,请参阅 spring-data-neo4j 文档here

这是文档的摘录:

如果一个字段在超类中声明但不同的索引 需要子类, level 属性声明将使用什么 作为索引。 Level.CLASS 使用声明字段的类和 Level.INSTANCE 使用提供的或实际实体的类 实例。

【讨论】:

  • 我尝试使用它,但我没有看到任何差异,看起来索引仍然在类级别。除了使用 LEVEL 属性扩展注释之外,是否可以举一个小例子来说明如何使用它?我错过了什么吗?我无法在文档中获得更多信息。
  • 是的,我几乎找不到任何关于它的用法的例子。这个讨论好像有提到forum.springsource.org/…
【解决方案2】:

我认为这是不可能的。您的property1 将始终在索引property1 中编入索引。能够在单个字段上指定多个索引可能会解决您的问题,但目前还不可能。不久前,我为此提出了an issue,但尚未实现。

如果你真的想要一个域(实体)对象方法,你也可以选择domain entity approach。它与 Spring 或 Spring Data Neo4j 无关,但它也可以解决问题。通过以这种方式手动处理您的实体,您还可以自己管理索引,从而获得您想要的所有灵活性。

只是一个问题,为什么要为每个子类指定不同的索引?

【讨论】:

  • 至于你的最后一个问题 - 也许我遗漏了一些东西,但我需要它以便能够对 B 类的 property2 进行查找,这样查找将仅限于B 类实例/节点。也许还有另一种方法来完成我想要的?
  • 您可以在所有属性上使用相同的索引。 Lucene 查询可能类似于“property2:a_certain_value”。在例如密码这看起来像 START n=node:your_index("property2:a_certain_value") RETURN n
  • 但在我的例子中,名为“property2”的索引将保存类 A 和类 B 或任何其他从 A 继承的类的实例,因为在所有这些类中,property2 是与名为“property2”的索引相关。我希望每个类的 property2 使用不同的索引,这样我就可以分别查找每种类型的实例,同时保持整洁的 OOP 设计。
  • 顺便说一句,它始终是基于类名查询的选项。它们也会自动编入索引。使用“START n=node:__types_("className:A") 开始您的密码查询。
  • 回答你的问题,已经是这样了。每个节点都有一个名为__type__ 的属性,其中包含完全限定的类名。如果您想在密码查询中使用此属性,请确保用反引号括起来
猜你喜欢
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2017-10-11
  • 2019-12-08
相关资源
最近更新 更多