Hi all,
I am trying to retrieve data from neo4j database using python version.
I have over 300000 nodes all joined to a master node by a OFTYPE relationships.
I used the following to traverse it:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Traversal
import neo4j
def get_OFTYPE(ar_node):#, ar_filter):
return OFTYPE(ar_node)
class OFTYPE(neo4j.Traversal):
# my_pos_filter = ""
#
# def __init__(self, start, pos_filter=""):
# # set an internal variable
# self.my_pos_filter = pos_filter
# neo4j.Traversal.__init__(self, start)
types = [
neo4j.Incoming.OFTYPE,
]
order = neo4j.BREADTH_FIRST
stop = neo4j.StopAtDepth(1)
def isReturnable(self, position):
return (not position.is_start
# and position.label == self.my_pos_filter
and position.last_relationship.type == 'OFTYPE')
and call the above by:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import argparse
import neo4j
import ConfigParser
import os, sys, datetime, string
import neoentity_traverse_test
from neo4j.util import Subreference
def main():
ls_current_script_path = sys.path[0] # os.getcwd()
ls_current_script_filename = sys.argv[0]
config = ConfigParser.RawConfigParser()
config.read(ls_current_script_path + '/' + 'neoentity.cfg')
parser = argparse.ArgumentParser(description='Initialize neo4j database for
mediasharks root enteties. NOTE: if the database '\
'does not exists, it will simply be
created.')
parser.add_argument('--neodbpath', dest='neodbpath', metavar='NEODB-PATH',
default=config.get('database', 'database_path'),
help='a directory where neodb should be created or
opened.')
parser.add_argument('--classpath', dest='kernalclasspath',
metavar='KERNAL-CLASSPATH',
default=config.get('neo4j', 'kernalclasspath'),
help='the path toneo4j kernal path.')
parser.add_argument('--jvm', dest='jvmclasspath', metavar='JVM-CLASSPATH',
default=config.get('jvm', 'jvmpath'),
help='the path toneo4j kernal path.')
args = parser.parse_args()
pytest(args.neodbpath, args.kernalclasspath, args.jvmclasspath)
def pytest(arg_neodb_path, arg_kernal_classpath, arg_jvm_classpath):
print "====================================================="
print "initializing neo4j db using parameters:"
print "database-path = " + arg_neodb_path
print "kernel-path = " + arg_kernal_classpath
print "jvm-path = " + arg_jvm_classpath
print "====================================================="
#initialize variables
ls_message = ""
#create new neo database
graphdb = neo4j.GraphDatabase(arg_neodb_path,
classpath=arg_kernal_classpath, jvm=arg_jvm_classpath)
#start new transaction
try:
tx = graphdb.transaction.begin()
rootindex = graphdb.index("root_index", create=True)
subbrandnode = rootindex["subbrand"]
referencenode = graphdb.node[0]
li_index = 0
ls_filter = "PEPSI"
for node in neoentity_traverse_test.get_OFTYPE(subbrandnode):#,
ls_filter):
ls_result = node["label"]
if ls_result.startswith(ls_filter):
li_index = li_index + 1
print ls_result
print li_index
except:
tx.failure()
print "Error occurred, exiting..."
raise
else:
tx.success()
finally:
tx.finish()
#saving current transactions and closing current database
graphdb.shutdown()
if __name__ == '__main__':
main()
The problem is it's taking too much time. how can I improve performance and how
can I use or call the lucene indexer from within python.
THX in advance.
Francois.
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user