Something like (these are totally untested, sorry for bugs)--also, this label AllCategories should probably be more what your entities actually are:
create constraint on (allCategories:AllCategories) assert allCategories.id is unique; UNWIND $nodes AS n MERGE (node:AllCategories {id: n.id}) SET node += n RETURN node If you want to retain category as a label, you could add it in a second part with something like: UNWIND $nodes AS n MERGE (node:AllCategories {id: n.id}) SET node += n call apoc.create.addLabels([ id(node) ], [ n.category ]) yield node RETURN node On Thu, Feb 7, 2019 at 3:52 PM Andrea Balzoni <andrea.balz...@keypartner.it> wrote: > Ids are supposed to be globally unique, regardless of their label (again, > i'm not sure this is the best approach, but i thought it was the one that > made more sense), i'm not sure what kind of info i could provide so feel > free to ask... > > Il giorno gio 7 feb 2019, 21:24 Eve Freeman <eve.fre...@gmail.com> ha > scritto: > >> Whoops, "if so" should be "if not". >> >> On Thu, Feb 7, 2019 at 3:22 PM Eve Freeman <eve.fre...@gmail.com> wrote: >> >>> Are the ids unique to each label? If so, maybe you can merge on one >>> "inclusive" label and then add an additional category label, and then you >>> can have just one constraint. No idea what you're doing here, so giving my >>> best guess. >>> >>> On Thu, Feb 7, 2019 at 2:40 PM Andrea Balzoni < >>> andrea.balz...@keypartner.it> wrote: >>> >>>> That sounds like a lot of constraints or am i wrong? >>>> >>>> Il giorno gio 7 feb 2019, 20:19 Eve Freeman <eve.fre...@gmail.com> ha >>>> scritto: >>>> >>>>> Yes. You would need to add a constraint for each label + id >>>>> combination. >>>>> >>>>> On Thu, Feb 7, 2019 at 1:57 PM Andrea Balzoni < >>>>> andrea.balz...@keypartner.it> wrote: >>>>> >>>>>> Sadly the ids i'm trying to add are not going to be necessarily >>>>>> unique, hence why i'm using merge. I think i grasped what a constrant is, >>>>>> but i cant say the same about indexes. So you are telling me that adding >>>>>> a >>>>>> constraint on ids would make the query faster? Sorry about questions that >>>>>> might sound stupid, but i'm fairly new to neo4j... >>>>>> >>>>>> Il giorno gio 7 feb 2019, 18:59 Eve Freeman <eve.fre...@gmail.com> >>>>>> ha scritto: >>>>>> >>>>>>> One other note--if you know these are unique ids, you can avoid >>>>>>> using merge, and just use create, which will be quicker still. >>>>>>> >>>>>>> On Thu, Feb 7, 2019 at 12:54 PM Eve Freeman <eve.fre...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Well, what a merge will do is check whether something exists before >>>>>>>> it creates it, "match or create". The match step will get linearly >>>>>>>> slower >>>>>>>> as it has to scan larger and larger lists of nodes on a label. If you >>>>>>>> add >>>>>>>> an index (at minimum), or unique constraint/node key (preferred, >>>>>>>> especially >>>>>>>> if you require uniqueness and will eventually have concurrent requests >>>>>>>> of >>>>>>>> this nature), it will be able to do the match step much quicker. >>>>>>>> >>>>>>>> On Thu, Feb 7, 2019 at 12:50 PM Andrea Balzoni < >>>>>>>> andrea.balz...@keypartner.it> wrote: >>>>>>>> >>>>>>>>> Honestly i heard of those, but i'm not using any. I'm quite new to >>>>>>>>> it, so i wasnt sure what their purpose is. >>>>>>>>> >>>>>>>>> Il giorno gio 7 feb 2019, 18:43 Eve Freeman <eve.fre...@gmail.com> >>>>>>>>> ha scritto: >>>>>>>>> >>>>>>>>>> What's your schema? Do you have a unique constraint or index on >>>>>>>>>> the labels + id you're merging on? >>>>>>>>>> >>>>>>>>>> Eve >>>>>>>>>> >>>>>>>>>> On Thu, Feb 7, 2019 at 12:23 PM <andrea.balz...@keypartner.it> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hello everyone, i'm trying to MERGE thousands of nodes using >>>>>>>>>>> UNWIND and apoc procedures (for a dynamic label creation) using >>>>>>>>>>> Java Driver >>>>>>>>>>> as follows: >>>>>>>>>>> >>>>>>>>>>> String query = >>>>>>>>>>> "UNWIND $nodes AS n " + >>>>>>>>>>> "CALL apoc.merge.node([n.category], {id: n.id}, >>>>>>>>>>> n) YIELD node RETURN node"; >>>>>>>>>>> session.run( query, params ); >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> My database contains something like 150k nodes divided by 16 >>>>>>>>>>> labels and 130k relationships of the same type. It worked fine so >>>>>>>>>>> far, it >>>>>>>>>>> never failed to deliver, but now that i'm trying to create >>>>>>>>>>> something like >>>>>>>>>>> 4k new nodes and 5k new relationships at once it took more than 30 >>>>>>>>>>> minutes. >>>>>>>>>>> I feel like it should be way faster than this. >>>>>>>>>>> >>>>>>>>>>> Am i doing anything wrong? Is it really supposed to be this >>>>>>>>>>> slow? Is there anything i can do to make this process smoother and >>>>>>>>>>> to >>>>>>>>>>> improve performances? >>>>>>>>>>> >>>>>>>>>>> Thanks in advance >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>> Google Groups "Neo4j" group. >>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>> it, send an email to neo4j+unsubscr...@googlegroups.com. >>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>> Google Groups "Neo4j" group. >>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>>> send an email to neo4j+unsubscr...@googlegroups.com. >>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "Neo4j" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to neo4j+unsubscr...@googlegroups.com. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Neo4j" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to neo4j+unsubscr...@googlegroups.com. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Neo4j" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to neo4j+unsubscr...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Neo4j" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to neo4j+unsubscr...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Neo4j" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to neo4j+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Neo4j" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to neo4j+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "Neo4j" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to neo4j+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to neo4j+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.