大家好我正试图通过代码为neo4j数据库添加索引。 我有这样的配置类设置。:
@Configuration
public class CreateIndex {
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
org.neo4j.ogm.config.Configuration configuration = new
org.neo4j.ogm.config.Configuration();
configuration.autoIndexConfiguration()
.setAutoIndex(AutoIndexMode.ASSERT.getName());
configuration.driverConfiguration().setDriverClassName
("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
return configuration;
}
@Bean
public SessionFactory sessionFactory() {
return new SessionFactory(configuration(), "com.domain");
}
}
我有我的域类,我添加了@Index注释。
@NodeEntity
@Getter
@NoArgsConstructor
@Component
public class Movie {
@GraphId
private Long id;
@Index(unique = true)
private String movieId;
}
我有我的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
在我的日志中,我看到我的索引查询正在执行
n.o.d.e.request.EmbeddedRequest : Request: CALL db.constraints() with params {}
2017-11-02 16:30:11.780 INFO 40073 --- [ main] o.n.o.d.e.request.EmbeddedRequest : Request: CALL db.indexes() with params {}
2017-11-02 16:30:11.789 INFO 40073 --- [ main] o.n.o.d.e.request.EmbeddedRequest : Request: CREATE INDEX ON :MOVIE(movieId ) with params {}
但是当我尝试使用:schema
查看索引是否存在时
这不会返回任何东西。
我试图使用NEO4JTemplate执行查询但不推荐使用它,你知道如何在启动时执行查询。
例如,我想在应用程序启动期间按代码添加索引查询
CREATE INDEX ON :MOVIE(movieId)
如果我手动添加,但如何添加到配置类,则此方法有效。
提前致谢
答案 0 :(得分:1)
您的配置大部分都是正确的。
您没有说明运行:schema
命令的位置,但我的猜测是它与您的应用程序中使用的数据库不同,因为配置如下:
org.neo4j.ogm.config.Configuration configuration = new
org.neo4j.ogm.config.Configuration();
configuration.autoIndexConfiguration()
.setAutoIndex(AutoIndexMode.ASSERT.getName());
configuration.driverConfiguration()
.setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
将在临时目录中创建非永久性数据库,在应用程序关闭后会被删除。原因是没有指定URI。
指定数据库URI并检查该数据库中的架构:
configuration.driverConfiguration()
.setURI("....");