任何人都可以从@GraphId
开始@Index
和org.neo4j.ogm.annotation
注释之间的区别吗?
现在,在阅读文档后,似乎@GraphId
用于为Neo4j内部逻辑创建标识符,用户不应该依赖它,因为它可以随着时间的推移重复使用。但是@Index
呢?
据我所知,基于图形的数据库的主要优点是,一旦我们知道从哪个开始就变得容易的节点/关系,因为我们所需要做的只是从该起始节点遍历图形。索引有助于这样做,对吧?因此,我们可以编写类似START n = node:index_name(property_name = value)
的内容,并通过'property_name'属性轻松地从索引节点开始探索图表,对吗?
所以,考虑一下这个实体:
@ToString
@NodeEntity(label = "Event")
@NoArgsConstructor
public class Event{
public Event(String eventName, LocalDate dateTime){
this.name = eventName;
this.date = dateTime;
}
public Event(Long id, String eventName, LocalDate dateTime){
this(eventName, dateTime);
this.id = id;
}
@Getter
@GraphId
private Long id;
@Getter
@Index(unique = true, primary = true)
@Property(name = "name")
private String name;
@Getter
@Property(name = "date")
@Convert(DateConverter.class)
private LocalDate date;
}
正如您所见,String name
属性已使用@Index
进行注释。如何编写Cypher查询实际从name ='something'的节点开始?什么是索引名称?或者Spring Data Neo4j 4.2.0.RELEASE在写MATCH (event:Event {name = 'somehting'} ...
时是否自己想出来?
@Repository
public interface EventRepository extends Neo4jRepository<Event, String>{
Event findOne(String eventName);
}
这里是repositry类,你可能会看到我使用String
作为存储库管理的实体的id的类型,所以我假设Spring使用Event类的name
属性来生成查询Event findOne(String eventName);
答案 0 :(得分:3)
Event findByName(String eventName);
答案 1 :(得分:0)
任何人都可以从org.neo4j.ogm.annotation中删除@GraphId和@Index注释之间的差异吗?
我假设您已经检查过Spring Data Neo4j的文档。但是我要添加的关于@GraphId和@Index的一件事是@GraphId在整个数据库中是唯一的,而@Index可以是相同的或唯一的,这取决于你的决定。
如何编写Cypher查询以实际从具有名称=&#39;某些节点的节点开始?什么是索引名称?或者Spring Data Neo4j 4.2.0.RELEASE在编写MATCH时会自己想象(事件:事件{name =&#39; somehting&#39;} ...?
我相信你以正确的方式编写Cypher查询。索引(包括图形ID)由数据库维护并保持最新。它们以某种数据结构的形式存储。例如,B-Tree或Map,可以减少搜索时间。你可以查看你的neo4j数据库的索引。它们或者存储在由db(Where does Neo4j store the data?)维护的文件中。
至于Cypher如何知道索引的名称,因为索引由db维护,而Cypher查询也由db解码,因此db可以根据Cypher查询访问索引。根据我对数据库系统的理解,这只是我的猜测。