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.

Reply via email to