Fun tool: Neo4jLoader

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Fun tool: Neo4jLoader

Sam Hokin-3
Hiya, devs. Being interested in Neo4j as a backing DB for mines, I wrote a utility which runs through a mine's data model, queries
each object along with its references and collections, and builds a Neo4j graph with that data. You can find it under:

https://github.com/sammyjava/ncgr.git

in the intermine folder. There's a properties file, neo4jloader.properties, where you set the URL for your mine's web service, and
you set the Neo4j server's Bolt URL, user and password. You can limit the number of objects to load with max.rows, and I recommend
you set this to 10 or something at the start. Since the loader uses MERGE, not CREATE, you can run it as many times as you like
without having to clear out the Neo4j database.

The one thing that's a bit undefined is how to name the relationships. Since a reference has a name like "organism" and collections
have names like "flankingRegions", I use those to label the relationships. Presumably one could go ontology on this and use the SO
relationship names, but that fails often since the SO often has several relationships between A to B while we have only one. And
it's probably clearer to use the reference/collection name for clarity w.r.t. the original mine.

It's slow. I'm loading the full BeanMine on a dev server, using the dev mine, and I doubt it'll be finished any time next week. But
it's a first crack, and with max.rows=100 a sub-mine will load pretty quickly, leaving a lot of nodes with only the mine ID value
set since those nodes didn't get the full treatment and were just loaded as references or collections. The advantage, of course, is
that it's totally automated. I'm sure there are ways of speeding this up enormously.

Oh, there's also a property, ignored.classes, which defaults to the redundant superclasses you don't want to load, like
InterMineObject. But if there are other items you'd like to keep off the graph, that's where you specify them.

I've attached an example graph of a gene that resulted from a small load.

Enjoy your weekend!
Sam aka sammyjava

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

2017-04-07-100536_1680x1026_scrot.png (345K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Gos Micklem-3

Hi Sam,

> Hiya, devs. Being interested in Neo4j as a backing DB for mines, I
> wrote a utility which runs through a mine's data model, queries each
> object along with its references and collections, and builds a Neo4j
> graph with that data. You can find it under:
>
> https://github.com/sammyjava/ncgr.git

Great that you have done this!

> in the intermine folder. There's a properties file,
> neo4jloader.properties, where you set the URL for your mine's web
> service, and you set the Neo4j server's Bolt URL, user and password.
> You can limit the number of objects to load with max.rows, and I
> recommend you set this to 10 or something at the start. Since the
> loader uses MERGE, not CREATE, you can run it as many times as you
> like without having to clear out the Neo4j database.
>
> The one thing that's a bit undefined is how to name the
> relationships. Since a reference has a name like "organism" and
> collections have names like "flankingRegions", I use those to label
> the relationships. Presumably one could go ontology on this and use
> the SO relationship names, but that fails often since the SO often
> has several relationships between A to B while we have only one. And
> it's probably clearer to use the reference/collection name for
> clarity w.r.t. the original mine.
>
> It's slow. I'm loading the full BeanMine on a dev server, using the
> dev mine, and I doubt it'll be finished any time next week. But it's
> a first crack, and with max.rows=100 a sub-mine will load pretty
> quickly, leaving a lot of nodes with only the mine ID value set
> since those nodes didn't get the full treatment and were just loaded
> as references or collections. The advantage, of course, is that it's
> totally automated. I'm sure there are ways of speeding this up
> enormously.

We'd be very interested to know how things go, especially any benchmarking.

> Oh, there's also a property, ignored.classes, which defaults to the
> redundant superclasses you don't want to load, like InterMineObject.
> But if there are other items you'd like to keep off the graph,
> that's where you specify them.
>
> I've attached an example graph of a gene that resulted from a small load.

Thanks!

Gos



> _______________________________________________
> dev mailing list
> [hidden email]
> https://lists.intermine.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Daniela Butano-2
In reply to this post by Sam Hokin-3
Hi Sam,
it's great!
Sorry to reply only now. I've just come back to work after some few sunny days in Italy :-)
I will have a look on it in the next days, I'm so curious!

I know that Bolt driver is not the most performant  way to query/upload data into neo4j (for this reason I've used the neo4j server extension for some benchmarking) but I agree with you that there might be ways to speed the process up.
In general, I suppose, we don't want to load all the super classes when can use the labels instead (for instance BioEntity/Sequencefeature) so the ignored.classes property seems very useful!

For my personal point of view the relations defined into neo4j should be natural and readable, easily queriable by Chypher so short form like PART-OF (or organism as you did) are better than some URIs (if you use ontology).
But we can always provide a mechanism the map PART-OF (or whatever we want to call the relationship between gene-organism) with the most appropriate ontology term.

Daniela

 

On 07/04/17 19:35, Sam Hokin wrote:
Hiya, devs. Being interested in Neo4j as a backing DB for mines, I wrote a utility which runs through a mine's data model, queries each object along with its references and collections, and builds a Neo4j graph with that data. You can find it under: https://github.com/sammyjava/ncgr.git in the intermine folder. There's a properties file, neo4jloader.properties, where you set the URL for your mine's web service, and you set the Neo4j server's Bolt URL, user and password. You can limit the number of objects to load with max.rows, and I recommend you set this to 10 or something at the start. Since the loader uses MERGE, not CREATE, you can run it as many times as you like without having to clear out the Neo4j database. The one thing that's a bit undefined is how to name the relationships. Since a reference has a name like "organism" and collections have names like "flankingRegions", I use those to label the relationships. Presumably one could go ontology on this and use the SO relationship names, but that fails often since the SO often has several relationships between A to B while we have only one. And it's probably clearer to use the reference/collection name for clarity w.r.t. the original mine. It's slow. I'm loading the full BeanMine on a dev server, using the dev mine, and I doubt it'll be finished any time next week. But it's a first crack, and with max.rows=100 a sub-mine will load pretty quickly, leaving a lot of nodes with only the mine ID value set since those nodes didn't get the full treatment and were just loaded as references or collections. The advantage, of course, is that it's totally automated. I'm sure there are ways of speeding this up enormously. Oh, there's also a property, ignored.classes, which defaults to the redundant superclasses you don't want to load, like InterMineObject. But if there are other items you'd like to keep off the graph, that's where you specify them. I've attached an example graph of a gene that resulted from a small load. Enjoy your weekend! Sam aka sammyjava
_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Daniela Butano-2
Hi Sam,
I run Neo4jLoader utility using intermine-test model. It seems that some nodes are duplicated. See in the picture for instance Contractors(we have only 2 contractors in postgres db) and Companies (we have only 2).
I haven't had the time to look on it with more detail, but it might be related to the fact that this is a many-to-many relationship.

daniela
 

    
On 11/04/17 13:09, Daniela Butano wrote:
Hi Sam,
it's great!
Sorry to reply only now. I've just come back to work after some few sunny days in Italy :-)
I will have a look on it in the next days, I'm so curious!

I know that Bolt driver is not the most performant  way to query/upload data into neo4j (for this reason I've used the neo4j server extension for some benchmarking) but I agree with you that there might be ways to speed the process up.
In general, I suppose, we don't want to load all the super classes when can use the labels instead (for instance BioEntity/Sequencefeature) so the ignored.classes property seems very useful!

For my personal point of view the relations defined into neo4j should be natural and readable, easily queriable by Chypher so short form like PART-OF (or organism as you did) are better than some URIs (if you use ontology).
But we can always provide a mechanism the map PART-OF (or whatever we want to call the relationship between gene-organism) with the most appropriate ontology term.

Daniela

 
On 07/04/17 19:35, Sam Hokin wrote:
Hiya, devs. Being interested in Neo4j as a backing DB for mines, I wrote a utility which runs through a mine's data model, queries each object along with its references and collections, and builds a Neo4j graph with that data. You can find it under: https://github.com/sammyjava/ncgr.git in the intermine folder. There's a properties file, neo4jloader.properties, where you set the URL for your mine's web service, and you set the Neo4j server's Bolt URL, user and password. You can limit the number of objects to load with max.rows, and I recommend you set this to 10 or something at the start. Since the loader uses MERGE, not CREATE, you can run it as many times as you like without having to clear out the Neo4j database. The one thing that's a bit undefined is how to name the relationships. Since a reference has a name like "organism" and collections have names like "flankingRegions", I use those to label the relationships. Presumably one could go ontology on this and use the SO relationship names, but that fails often since the SO often has several relationships between A to B while we have only one. And it's probably clearer to use the reference/collection name for clarity w.r.t. the original mine. It's slow. I'm loading the full BeanMine on a dev server, using the dev mine, and I doubt it'll be finished any time next week. But it's a first crack, and with max.rows=100 a sub-mine will load pretty quickly, leaving a lot of nodes with only the mine ID value set since those nodes didn't get the full treatment and were just loaded as references or collections. The advantage, of course, is that it's totally automated. I'm sure there are ways of speeding this up enormously. Oh, there's also a property, ignored.classes, which defaults to the redundant superclasses you don't want to load, like InterMineObject. But if there are other items you'd like to keep off the graph, that's where you specify them. I've attached an example graph of a gene that resulted from a small load. Enjoy your weekend! Sam aka sammyjava
_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Daniela Butano-2

Maybe now you can see the picture :-)



On 13/04/17 17:36, Daniela Butano wrote:
Hi Sam,
I run Neo4jLoader utility using intermine-test model. It seems that some nodes are duplicated. See in the picture for instance Contractors(we have only 2 contractors in postgres db) and Companies (we have only 2).
I haven't had the time to look on it with more detail, but it might be related to the fact that this is a many-to-many relationship.

daniela
 

On 11/04/17 13:09, Daniela Butano wrote:
Hi Sam,
it's great!
Sorry to reply only now. I've just come back to work after some few sunny days in Italy :-)
I will have a look on it in the next days, I'm so curious!

I know that Bolt driver is not the most performant  way to query/upload data into neo4j (for this reason I've used the neo4j server extension for some benchmarking) but I agree with you that there might be ways to speed the process up.
In general, I suppose, we don't want to load all the super classes when can use the labels instead (for instance BioEntity/Sequencefeature) so the ignored.classes property seems very useful!

For my personal point of view the relations defined into neo4j should be natural and readable, easily queriable by Chypher so short form like PART-OF (or organism as you did) are better than some URIs (if you use ontology).
But we can always provide a mechanism the map PART-OF (or whatever we want to call the relationship between gene-organism) with the most appropriate ontology term.

Daniela

 
On 07/04/17 19:35, Sam Hokin wrote:
Hiya, devs. Being interested in Neo4j as a backing DB for mines, I wrote a utility which runs through a mine's data model, queries each object along with its references and collections, and builds a Neo4j graph with that data. You can find it under: https://github.com/sammyjava/ncgr.git in the intermine folder. There's a properties file, neo4jloader.properties, where you set the URL for your mine's web service, and you set the Neo4j server's Bolt URL, user and password. You can limit the number of objects to load with max.rows, and I recommend you set this to 10 or something at the start. Since the loader uses MERGE, not CREATE, you can run it as many times as you like without having to clear out the Neo4j database. The one thing that's a bit undefined is how to name the relationships. Since a reference has a name like "organism" and collections have names like "flankingRegions", I use those to label the relationships. Presumably one could go ontology on this and use the SO relationship names, but that fails often since the SO often has several relationships between A to B while we have only one. And it's probably clearer to use the reference/collection name for clarity w.r.t. the original mine. It's slow. I'm loading the full BeanMine on a dev server, using the dev mine, and I doubt it'll be finished any time next week. But it's a first crack, and with max.rows=100 a sub-mine will load pretty quickly, leaving a lot of nodes with only the mine ID value set since those nodes didn't get the full treatment and were just loaded as references or collections. The advantage, of course, is that it's totally automated. I'm sure there are ways of speeding this up enormously. Oh, there's also a property, ignored.classes, which defaults to the redundant superclasses you don't want to load, like InterMineObject. But if there are other items you'd like to keep off the graph, that's where you specify them. I've attached an example graph of a gene that resulted from a small load. Enjoy your weekend! Sam aka sammyjava
_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

neo4jLoader.png (271K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Sam Hokin-3
Yeah, that's an older version, I need to do a new commit to GitHub. I'll let you know. It's cleaned up a lot now.

On 04/13/2017 10:37 AM, Daniela Butano wrote:

> Maybe now you can see the picture :-)
>
>
>
> On 13/04/17 17:36, Daniela Butano wrote:
>> Hi Sam,
>> I run Neo4jLoader utility using intermine-test model. It seems that some nodes are duplicated. See in the picture for instance Contractors(we have only 2 contractors in postgres db) and Companies (we have only 2).
>> I haven't had the time to look on it with more detail, but it might be related to the fact that this is a many-to-many relationship.
>>
>> daniela
>>
>>
>> On 11/04/17 13:09, Daniela Butano wrote:
>>> Hi Sam,
>>> it's great!
>>> Sorry to reply only now. I've just come back to work after some few sunny days in Italy :-)
>>> I will have a look on it in the next days, I'm so curious!
>>>
>>> I know that Bolt driver is not the most performant  way to query/upload data into neo4j (for this reason I've used the neo4j server extension for some benchmarking) but I agree with you that there might be ways to speed the process up.
>>> In general, I suppose, we don't want to load all the super classes when can use the labels instead (for instance BioEntity/Sequencefeature) so the ignored.classes property seems very useful!
>>>
>>> For my personal point of view the relations defined into neo4j should be natural and readable, easily queriable by Chypher so short form like PART-OF (or organism as you did) are better than some URIs (if you use ontology).
>>> But we can always provide a mechanism the map PART-OF (or whatever we want to call the relationship between gene-organism) with the most appropriate ontology term.
>>>
>>> Daniela
>>>
>>>
>>> On 07/04/17 19:35, Sam Hokin wrote:
>>>> Hiya, devs. Being interested in Neo4j as a backing DB for mines, I wrote a utility which runs through a mine's data model,
>>>> queries each object along with its references and collections, and builds a Neo4j graph with that data. You can find it under:
>>>> https://github.com/sammyjava/ncgr.git in the intermine folder. There's a properties file, neo4jloader.properties, where you set
>>>> the URL for your mine's web service, and you set the Neo4j server's Bolt URL, user and password. You can limit the number of
>>>> objects to load with max.rows, and I recommend you set this to 10 or something at the start. Since the loader uses MERGE, not
>>>> CREATE, you can run it as many times as you like without having to clear out the Neo4j database. The one thing that's a bit
>>>> undefined is how to name the relationships. Since a reference has a name like "organism" and collections have names like
>>>> "flankingRegions", I use those to label the relationships. Presumably one could go ontology on this and use the SO relationship
>>>> names, but that fails often since the SO often has several relationships between A to B while we have only one. And it's
>>>> probably clearer to use the reference/collection name for clarity w.r.t. the original mine. It's slow. I'm loading the full
>>>> BeanMine on a dev server, using the dev mine, and I doubt it'll be finished any time next week. But it's a first crack, and with
>>>> max.rows=100 a sub-mine will load pretty quickly, leaving a lot of nodes with only the mine ID value set since those nodes
>>>> didn't get the full treatment and were just loaded as references or collections. The advantage, of course, is that it's totally
>>>> automated. I'm sure there are ways of speeding this up enormously. Oh, there's also a property, ignored.classes, which defaults
>>>> to the redundant superclasses you don't want to load, like InterMineObject. But if there are other items you'd like to keep off
>>>> the graph, that's where you specify them. I've attached an example graph of a gene that resulted from a small load. Enjoy your
>>>> weekend! Sam aka sammyjava
>>>>
>>>> _______________________________________________
>>>> dev mailing list
>>>> [hidden email]
>>>> https://lists.intermine.org/mailman/listinfo/dev
>>
>> _______________________________________________
>> dev mailing list
>> [hidden email]
>> https://lists.intermine.org/mailman/listinfo/dev
>
>
> _______________________________________________
> dev mailing list
> [hidden email]
> https://lists.intermine.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Sam Hokin-3
Do a git pull to get the latest. It now loads attributes for reference and collection nodes, which is convenient when you're doing
partial loads, which is what one tends to do, so at least all the nodes shown have populated properties. If you see one that
doesn't, it usually results from the same IM id corresponding to two classes (MRNA, Transcript) which have to be "merged" with the
new line in neo4jloader.properties as follows:

# comma-separated list of dot-separated class pairs to replace in node merge, ReplaceThisClass.WithThisClass:
replaced.classes = Transcript.MRNA

Since Neo4j doesn't have the concept of node inheritance (as far as I know) we need to merge redundant classes like MRNA and
Transcript. (Some objects like Intron reference transcripts, others reference mRNAs, and you break the graph if you have transcript
relations that differ from mRNA relations; in this case you strand introns with their transcripts which are not the same mRNAs.)

Right now you still get duplicated edges from reverse-relationships in the IM data model. That's because it requires Actual Work to
thin those out. They come across as independent relations with different names, e.g. geneticMap (reference) and linkageGroups
(collection) in BeanMine, see attached. It's an easy fix, I think it will require listing the reverse or forward relation you want
to drop. But I'll wait on that since we may come up with a general rule for dropping reverse edges.

It'd be nice if Neo4j supported undirected edges, just for aesthetic purposes; clearly you can query them without the arrow, but
it'd be nice if the browser could show them without the arrows. But I understand why they don't want to support it, it's not needed
and would just add overhead.

Thanks for trying it out!

>> On 13/04/17 17:36, Daniela Butano wrote:
>>> Hi Sam,
>>> I run Neo4jLoader utility using intermine-test model. It seems that some nodes are duplicated. See in the picture for instance
>>> Contractors(we have only 2 contractors in postgres db) and Companies (we have only 2).
>>> I haven't had the time to look on it with more detail, but it might be related to the fact that this is a many-to-many relationship.
>>>
>>> daniela

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev

double-relations.svg (57K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Daniela Butano-2
Thanks Sam, I will have a look next week...here it's Easter holiday.
Anyway, I think that the duplication problem was because I didn't ignore
the super classes..

Daniela
On 2017-04-13 18:43, Sam Hokin wrote:

> Do a git pull to get the latest. It now loads attributes for reference
> and collection nodes, which is convenient when you're doing partial
> loads, which is what one tends to do, so at least all the nodes shown
> have populated properties. If you see one that doesn't, it usually
> results from the same IM id corresponding to two classes (MRNA,
> Transcript) which have to be "merged" with the new line in
> neo4jloader.properties as follows:
>
> # comma-separated list of dot-separated class pairs to replace in node
> merge, ReplaceThisClass.WithThisClass:
> replaced.classes = Transcript.MRNA
>
> Since Neo4j doesn't have the concept of node inheritance (as far as I
> know) we need to merge redundant classes like MRNA and Transcript.
> (Some objects like Intron reference transcripts, others reference
> mRNAs, and you break the graph if you have transcript relations that
> differ from mRNA relations; in this case you strand introns with their
> transcripts which are not the same mRNAs.)
>
> Right now you still get duplicated edges from reverse-relationships in
> the IM data model. That's because it requires Actual Work to thin
> those out. They come across as independent relations with different
> names, e.g. geneticMap (reference) and linkageGroups (collection) in
> BeanMine, see attached. It's an easy fix, I think it will require
> listing the reverse or forward relation you want to drop. But I'll
> wait on that since we may come up with a general rule for dropping
> reverse edges.
>
> It'd be nice if Neo4j supported undirected edges, just for aesthetic
> purposes; clearly you can query them without the arrow, but it'd be
> nice if the browser could show them without the arrows. But I
> understand why they don't want to support it, it's not needed and
> would just add overhead.
>
> Thanks for trying it out!
>
>>> On 13/04/17 17:36, Daniela Butano wrote:
>>>> Hi Sam,
>>>> I run Neo4jLoader utility using intermine-test model. It seems that
>>>> some nodes are duplicated. See in the picture for instance
>>>> Contractors(we have only 2 contractors in postgres db) and Companies
>>>> (we have only 2).
>>>> I haven't had the time to look on it with more detail, but it might
>>>> be related to the fact that this is a many-to-many relationship.
>>>>
>>>> daniela
>
> _______________________________________________
> dev mailing list
> [hidden email]
> https://lists.intermine.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Fun tool: Neo4jLoader

Daniela Butano-2
In reply to this post by Sam Hokin-3

On 13/04/17 18:43, Sam Hokin wrote:

Do a git pull to get the latest. It now loads attributes for reference and collection nodes, which is convenient when you're doing partial loads, which is what one tends to do, so at least all the nodes shown have populated properties. If you see one that doesn't, it usually results from the same IM id corresponding to two classes (MRNA, Transcript) which have to be "merged" with the new line in neo4jloader.properties as follows:

# comma-separated list of dot-separated class pairs to replace in node merge, ReplaceThisClass.WithThisClass:
replaced.classes = Transcript.MRNA

Since Neo4j doesn't have the concept of node inheritance (as far as I know) we need to merge redundant classes like MRNA and Transcript. (Some objects like Intron reference transcripts, others reference mRNAs, and you break the graph if you have transcript relations that differ from mRNA relations; in this case you strand introns with their transcripts which are not the same mRNAs.)

Right now you still get duplicated edges from reverse-relationships in the IM data model. That's because it requires Actual Work to thin those out. They come across as independent relations with different names, e.g. geneticMap (reference) and linkageGroups (collection) in BeanMine, see attached. It's an easy fix, I think it will require listing the reverse or forward relation you want to drop. But I'll wait on that since we may come up with a general rule for dropping reverse edges.
You probably know (better than me), that in http://intermine.readthedocs.io/en/latest/data-model/model/ there is a section describing the rules to define one-to-many, many-to-one, many-to-many relationships.

It'd be nice if Neo4j supported undirected edges, just for aesthetic purposes; clearly you can query them without the arrow, but it'd be nice if the browser could show them without the arrows. But I understand why they don't want to support it, it's not needed and would just add overhead.
yes, it would be nice to have undirected edges and not only for aesthetic purpose! If it's clear that in most of the cases the direction prevents ambiguity, for instance teamA-[DEFEAT]->teamB, in some cases it would be nice to explicitly declare that the edge is bidirectional, for instance Bob-[FRIEND]-Alice. In neo4 you can't do it and they also recommend to not create both relationships, for instance  Bob-[FRIEND]->Alice and Alice-[FRIEND]->Bob. See this nice post https://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html.

Thanks for trying it out!
Thank you!

On 13/04/17 17:36, Daniela Butano wrote:
Hi Sam,
I run Neo4jLoader utility using intermine-test model. It seems that some nodes are duplicated. See in the picture for instance
Contractors(we have only 2 contractors in postgres db) and Companies (we have only 2).
I haven't had the time to look on it with more detail, but it might be related to the fact that this is a many-to-many relationship.

daniela


_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev


_______________________________________________
dev mailing list
[hidden email]
https://lists.intermine.org/mailman/listinfo/dev
Loading...