1

解决了

好的,我只是弄乱了 neo4j-server.properties 的配置文件,我不应该使用“...”来编写数据库路径。

我使用 java 的插入器创建了一个 neo4j 数据库,并努力使用 py2neo 访问它。这是我的java代码:

///opt/java/64/jdk1.6.0_45/bin/javac -classpath $HOME/opt/usr/neo4j-community-1.8.2/lib/*:. neo_batch.java
///opt/java/64/jdk1.6.0_45/bin/java -classpath $HOME/opt/usr/neo4j-community-1.8.2/lib/*:. neo_batch


import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.index.Index;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.lang.Long;

import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.DynamicRelationshipType;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.helpers.collection.MapUtil;
import org.neo4j.unsafe.batchinsert.BatchInserter;
import org.neo4j.unsafe.batchinsert.BatchInserterImpl;
import org.neo4j.unsafe.batchinsert.BatchInserters;
import org.neo4j.unsafe.batchinsert.BatchInserterIndex;
import org.neo4j.unsafe.batchinsert.BatchInserterIndexProvider;
import org.neo4j.unsafe.batchinsert.LuceneBatchInserterIndexProvider;


public class neo_batch{
    private static final String KEY = "id";

    public static void main(String[] args) {


        //create & connect 2 neo db folder
        String batch_dir = "neo4j-batchinserter-store";
        BatchInserter inserter = BatchInserters.inserter( batch_dir );

        //set up neo index
        BatchInserterIndexProvider indexProvider =
            new LuceneBatchInserterIndexProvider( inserter );
        BatchInserterIndex OneIndex  =
            indexProvider.nodeIndex( "one", MapUtil.stringMap( "type", "exact" ) );
        OneIndex.setCacheCapacity( "id", 100000 );

        //batchin graph, index and relationships
        RelationshipType linked = DynamicRelationshipType.withName( "linked" );
        for (int i=0;i<10;i++){
            System.out.println(i);
            long Node1 = createIndexedNode(inserter, OneIndex, i);
            long Node2 = createIndexedNode(inserter, OneIndex, i+10);
            inserter.createRelationship(Node1, Node2, linked, null);
        }
        indexProvider.shutdown();
        inserter.shutdown();

    }

    // START SNIPPET: helperMethods

    private static long createIndexedNode(BatchInserter inserter,BatchInserterIndex OneIndex,final long id)
    {
        Map<String, Object> properties = new HashMap<String, Object>();
        properties.put( KEY, id );
        long node = inserter.createNode( properties );
        OneIndex.add( node, properties);
        return node;
    }

    // END SNIPPET: helperMethods


}

然后我相应地修改neo4j-server.properties配置文件并启动neo4j start.

以下 python 代码表明该图为空

from py2neo import neo4j

graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")

graph.size()
Out[8]: 0

graph.get_indexed_node("one",'id',1)

我的方法有什么问题?谢谢

编辑

我也不能用密码计算节点:

neo4j-sh (?)$ START n=node(*)                 
> return count(*);
+----------+
| count(*) |
+----------+
| 0        |
+----------+
1 row
0 ms

编辑 2

我可以用 java api 检查索引和节点是否存在

private static void query_batched_db(){
    GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( batch_dir);

    IndexManager indexes = graphDb.index();
    boolean oneExists = indexes.existsForNodes("one");
    System.out.println("Does the 'one' index exists: "+oneExists);
    System.out.println("list indexes: "+graphDb.index().nodeIndexNames());

    //search index 'one'
    Index<Node> oneIndex = graphDb.index().forNodes( "one" );

    for (int i=0;i<25;i++){
        IndexHits<Node> hits = oneIndex.get( KEY, i );
        System.out.println(hits.size());
    }

    graphDb.shutdown();

}

输出在哪里

Does the 'one' index exists: true
list indexes: [Ljava.lang.String;@26ae533a
1
1
...
1
1
0
0
0
0
0

现在,如果我使用 python 填充图形,我将无法使用以前的 java 方法访问它们(将再次计数 20)

from py2neo import neo4j

graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
idx=graph.get_or_create_index(neo4j.Node,"idx")
for k in range(100):
    graph.get_or_create_indexed_node('idx','id',k,{'id':k}

编辑 3

现在我删除了我使用批处理插入器创建的存储,即neo4j-test-store配置neo4j-server.properties文件继续指向已删除的存储,即org.neo4j.server.database.location="{some_path}/neo4j-test-store".

现在,如果我运行密码计数,我得到 100,100 是我使用 py2neo 插入的节点数。

我对这些东西要疯了!

解决了

好的,我只是弄乱了 neo4j-server.properties 的配置文件,我不应该使用“...”来编写数据库路径。

4

0 回答 0