There's fulltext index support in the indexing, but since I'm not by any means well travelled in the python bindings maybe someone can chip in about how this is done?
2010/10/5 Francois Kassis <francois_kas...@hotmail.com> > Hi Mattias, > Thx for your prompt reply. > Actually I already used indexes while inserting data to check if a > particular node is already inserted or not. > but what if I want to get all nodes starting with "PEP" or "PEPSI" as in > the > below example? > > thx. > Francois. > -------------------------------------------------- > From: "Mattias Persson" <matt...@neotechnology.com> > Sent: Tuesday, October 05, 2010 12:46 PM > To: "Neo4j user discussions" <user@lists.neo4j.org> > Subject: Re: [Neo4j] Traversing Neo4j using python binding > > > Yep, your use case is a good fit for using indexes... looping through > 300k > > nodes just to find one particular isn't very efficient. Take a look at > > http://components.neo4j.org/neo4j.py/ for how to use indexing in the > neo4j > > python bindings. > > > > 2010/10/5 Francois Kassis <francois_kas...@hotmail.com> > > > >> 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 > >> User@lists.neo4j.org > >> https://lists.neo4j.org/mailman/listinfo/user > >> > > > > > > > > -- > > Mattias Persson, [matt...@neotechnology.com] > > Hacker, Neo Technology > > www.neotechnology.com > > _______________________________________________ > > Neo4j mailing list > > User@lists.neo4j.org > > https://lists.neo4j.org/mailman/listinfo/user > > > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user > -- Mattias Persson, [matt...@neotechnology.com] Hacker, Neo Technology www.neotechnology.com _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user