Neo4j 3x和传统节点自动索引,带有自定义Lucene Analyzer

Neo4j 3x和传统节点自动索引,带有自定义Lucene Analyzer,neo4j,lucene,spring-data-neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Lucene,Spring Data Neo4j,Spring Data Neo4j 4,Neo4j Ogm,在我的Neo4j 3.0.3和SDN 4.2.0.BUILD-SNAPSHOT中,我创建了以下配置: @Configuration @EnableNeo4jRepositories(basePackages = "com.example") @EnableTransactionManagement public class Neo4jTestConfig extends Neo4jConfiguration { private static final String NEO4J_EMB

在我的Neo4j 3.0.3和SDN 4.2.0.BUILD-SNAPSHOT中,我创建了以下配置:

@Configuration
@EnableNeo4jRepositories(basePackages = "com.example")
@EnableTransactionManagement
public class Neo4jTestConfig extends Neo4jConfiguration {

    private static final String NEO4J_EMBEDDED_DATABASE_PATH_PROPERTY = "neo4j.embedded.database.path";

    @PostConstruct
    public void init() {
        Components.setDriver(new EmbeddedDriver(graphDatabaseService()));

        EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
        GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();
        try (Transaction t = databaseService.beginTx()) {
            Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
            databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
            databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
            databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
            t.success();
        }
    }

    public GraphDatabaseService graphDatabaseService() {

        // @formatter:off
        GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory()
                .newEmbeddedDatabaseBuilder(new File(environment.getProperty(NEO4J_EMBEDDED_DATABASE_PATH_PROPERTY)))       
                .setConfig(GraphDatabaseSettings.node_keys_indexable, "name,description")
                .setConfig(GraphDatabaseSettings.node_auto_indexing, "true").
                newGraphDatabase();         
        // @formatter:on        

        return graphDatabaseService;
    }
现在我的测试失败了,因为
StandardAnalyzerV36
似乎没有正确地应用于索引

我做错了什么?如何修复

已更新

我正在尝试使用
ogm.properties
配置驱动程序:

driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver

dbms.auto_index.nodes.keys=name,description
dbms.auto_index.nodes.enabled=true
和配置:

@Configuration
@EnableNeo4jRepositories(basePackages = "com.example")
@EnableTransactionManagement
public class Neo4jTestConfig extends Neo4jConfiguration {

    @Resource
    private Environment environment;

    @PostConstruct
    public void init() {
        EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
        GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();

        try (Transaction t = databaseService.beginTx()) {
            Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
            databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
            databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
            databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
            t.success();
        }
    }

    @Override
    public SessionFactory getSessionFactory() {
        return new SessionFactory("com.example");
    }

}
@配置
@EnableNeo4jRepositories(basePackages=“com.example”)
@启用事务管理
公共类Neo4jTestConfig扩展了Neo4jConfiguration{
@资源
私人环境;
@施工后
公共void init(){
EmbeddedDriver EmbeddedDriver=(EmbeddedDriver)Components.driver();
GraphDatabaseService databaseService=embeddedDriver.getGraphDatabaseService();
try(事务t=databaseService.beginTx()){
Index autoIndex=databaseService.Index().forNodes(“node_auto_Index”);
databaseService.index().setConfiguration(自动索引,“类型”,“全文”);
databaseService.index().setConfiguration(自动索引,“to_lower_case”,“true”);
databaseService.index().setConfiguration(自动索引,“analyzer”,StandardAnalyzerV36.class.getName());
t、 成功();
}
}
@凌驾
public SessionFactory getSessionFactory(){
返回新的SessionFactory(“com.example”);
}
}
但它仍然不起作用


应该在ogm.properties中放置哪些设置?

我认为不应该创建新的嵌入式驱动程序:
组件.setDriver(新的嵌入式驱动程序(graphDatabaseService())

相反,从已经配置的驱动程序中获取GraphDatabaseService并使用它

     EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
     GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();
     try (Transaction t = databaseService.beginTx()) {
      Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
      databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
      databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
      databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
      t.success();
     }
然后使用上面相同的方法获取底层图形数据库的句柄

更新
ogm.properties不支持dbms.auto_index.nodes.keys或dbms.auto_index.nodes.enabled。这些都是在创建GraphDatabaseService时配置的,对于当前版本的OGM,无法进行配置。请参阅

我添加了
ogm.properties
,以便在不使用
组件的情况下配置嵌入式驱动器.setDriver(新的嵌入式驱动器(graphDatabaseService())
但是看起来像是
dbms.auto_index.nodes.keys
dbms.auto_index.nodes.keys
不是这样工作的。我做错了什么?
     EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
     GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();
     try (Transaction t = databaseService.beginTx()) {
      Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
      databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
      databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
      databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
      t.success();
     }
@Bean
public Configuration getConfiguration() {
   Configuration config = new Configuration();
   config
       .driverConfiguration()
       .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver")
       .setURI("file:///var/tmp/graph.db");
   return config;
}

@Bean
public SessionFactory getSessionFactory() {
    return new SessionFactory(getConfiguration(), <packages> );
}
Configuration configuration = new Configuration()
             .driverConfiguration()
             .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver")
             .setURI(uri);