为spring数据添加索引neo4j不起作用

时间:2017-11-02 00:13:49

标签: spring-data-neo4j spring-data-neo4j-4

大家好我正试图通过代码为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) 

如果我手动添加,但如何添加到配置类,则此方法有效。

提前致谢

1 个答案:

答案 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("....");