Neo4j Spatial:提供的索引配置与存储的配置不匹配

时间:2013-05-28 08:04:01

标签: neo4j

我正在使用Neo4j 1.8.2,空间为0.9。

当我尝试在已包含索引的现有图形上获取空间索引的句柄时,我得到以下异常:

线程“main”中的异常java.lang.IllegalArgumentException:提供的索引配置: {geometry_type = point,lon = lon,provider = spatial,lat = lat} 与有效存储的配置不匹配: {geometry_type = point,lon = lon,provider = spatial,lat = lat} 'testspatial'     at org.neo4j.kernel.IndexManagerImpl.assertConfigMatches(IndexManagerImpl.java:156)     at org.neo4j.kernel.IndexManagerImpl.findIndexConfig(IndexManagerImpl.java:137)     at org.neo4j.kernel.IndexManagerImpl.getOrCreateIndexConfig(IndexManagerImpl.java:198)     at org.neo4j.kernel.IndexManagerImpl.getOrCreateNodeIndex(IndexManagerImpl.java:301)     at org.neo4j.kernel.IndexManagerImpl.forNodes(IndexManagerImpl.java:289)     在TestSpatialIndexFetch.createSpatialIndex(TestSpatialIndexFetch.java:22)     在TestSpatialIndexFetch.main(TestSpatialIndexFetch.java:18)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)     在java.lang.reflect.Method.invoke(Method.java:597)     在com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

如果删除数据库,则会成功创建索引。如果我现在使用此数据库来获取索引,则会失败。

有什么想法吗?

示例测试代码:

public class TestSpatialIndexFetch {

    public static void main(String[] args) {
        EmbeddedGraphDatabase db = new EmbeddedGraphDatabase("c://neo4jdbs//testindex");
        registerShutdownHook(db);
        Index<Node> index = createSpatialIndex(db, "testspatial");
    }

    private static Index<Node> createSpatialIndex(EmbeddedGraphDatabase db, String indexName) {
        return db.index().forNodes(indexName, SpatialIndexProvider.SIMPLE_POINT_CONFIG);
    }

    private static void registerShutdownHook( final GraphDatabaseService graphDb )
    {
        Runtime.getRuntime().addShutdownHook( new Thread()
        {
            @Override
            public void run()
            {
                graphDb.shutdown();
            }
        } );
    }
}