create_unique() also should add the entry to the index automatically if it 
created a new node. I wonder if your add_entries line 382 could be 
executing more often than you want- just a thought

On Thursday, March 19, 2015 at 4:38:39 PM UTC-4, Mark Jensen wrote:
>
> The blog is very old, it needs a complete update; unfortunate I have very 
> few tuits these days...
>
> create_unique() lets the neo4j server do the lookup and creates the node 
> or relationship if it doesn't exist in the index (it wraps a REST call that 
> does this natively)-- so your code doesn't have to spend cycles on this.
>
> Should work like so:
>
> $new_or_existing_node = $node_idx->create_unique( $indexed_property_name 
> => $value_for_new_node,$node_as_hash)
> $new_or_existing_rel = $rel_idx->create_unique($indexed_property_name => 
> $value_for_new_rel,$from_node => $to_node,$relationship_type)
>
>
>
>
>
> On Thursday, March 19, 2015 at 8:24:07 AM UTC-4, Sunit Jain wrote:
>>
>> Ahh! That's my bad! Sorry!
>>
>> I corrected it and ran it again. But I still get some taxa that are the 
>> same but have multiple nodes. The updated code is available here 
>> <https://github.com/sunitj/SuperMoM/blob/master/IMG/createDB.pl> (lines: 
>> 368-393). Here is the snippet:
>>
>> Also, what's the difference between how I'm creating nodes and using the 
>> create_unique function? Aside from maybe saving me a few lines?
>>
>> I was trying to use the function, but wasn't able to figure out what the 
>> first and second arguments were. I couldn't find it on the blog I mentioned 
>> above and in your slides they were both "name=>$pkg" or similar.
>>
>> --
>> Sunit Jain
>> Research Computing Specialist -- Bioinformatics
>> Michigan Geomicrobiology Lab
>> Dept. of Earth & Environmental Sciences,
>> University of Michigan,
>> Ann Arbor, MI, USA.
>> email: [email protected]
>> web: www.sunitjain.com
>> meet: www.sunitjain.com/contact
>>
>> On Wed, Mar 18, 2015 at 10:10 PM, Mark Jensen <[email protected]> 
>> wrote:
>>
>>> Thanks Sunit -- 
>>> I'll think your problem is the difference highlighted in the code below. 
>>> You're looking for the species with the key 'name', but adding to the index 
>>> with key 'id'.
>>>
>>> You may find the $idx->create_unique() 
>>> <https://metacpan.org/pod/REST::Neo4p::Index#create_unique>method 
>>> helpful too. 
>>> MAJ 
>>>
>>> if ($PhyloDist{$gene}{"DOMAIN"}) {
>>>   my $species=$PhyloDist{$gene}{"SPECIES"};
>>>   ($taxa_nodes{$gene})= $idx->find_entries(name=>$species);
>>>   unless ($taxa_nodes{$gene}) {
>>>     $taxa_nodes{$gene}=REST::Neo4p::Node->new({id=>$PhyloDist{$gene}{
>>> "SPECIES"}});
>>>     $taxa_nodes{$gene}->set_labels("Taxa");
>>>     foreach (keys %{$PhyloDist{$gene}}){
>>>       next if $_ eq "SPECIES";
>>>       next if $_ eq "PERCENT";
>>>       my $value=lc($PhyloDist{$gene}{$_});
>>>       my $key=lc($_);
>>>       $taxa_nodes{$gene}->set_property({$key=>$value});
>>>     }
>>>     $idx->add_entry($taxa_nodes{$gene}, id=>$species);
>>>   }
>>> ...
>>> }
>>>
>>>
>>> On Wednesday, March 18, 2015 at 5:30:15 PM UTC-4, Sunit Jain wrote:
>>>>
>>>> First, congratulations on creating such a great perl driver for Neo4j. 
>>>> I really appreciate the work you must have put into it.
>>>>
>>>> I've been trying to use this driver to create a database for our 
>>>> meta*omic data. I was successfully able to put together some perl code by 
>>>> following some slides <http://www.slideshare.net/majensen1/dcpm-meetup>, 
>>>> the neo4j blog post <http://neo4j.com/blog/restneo4p-a-perl-ogm/> about 
>>>> this driver and the MetaCPAN <https://metacpan.org/pod/REST::Neo4p> 
>>>> description. However I'm getting stuck at a point where I'm no longer sure 
>>>> what's going on. I'm hoping you might be able to help.
>>>>
>>>> *As a side note, the example on the neo4j blog 
>>>> <http://neo4j.com/blog/restneo4p-a-perl-ogm/> seemed very limited and 
>>>> about 
>>>> 2yr old, is there a more recent version somewhere? Maybe one with best 
>>>> practices? If not, I'd be happy to start one explaining what I did for my 
>>>> current project, once I have at least one successful run. I**t won't 
>>>> be as insightful, but it'll be something.*
>>>>
>>>> *Goal:*
>>>> Create unique Taxa nodes, have the gene locus that belong to the Taxa 
>>>> relate to it with an "IN_ORGANISM" relationship:
>>>>
>>>> (Taxa)<-[: IN_ORGANISM]-(Locus)
>>>>
>>>>
>>>> More details can be found in createDB.pl (lines: 326-352), here 
>>>> <https://github.com/sunitj/SuperMoM/tree/master/IMG>
>>>>
>>>> *Issue:*
>>>> Here is the perl snippet of my code to create unique 'Taxa' nodes:
>>>> [image: Inline image 1]
>>>>
>>>> Perl snippet to create unique relations to Taxa:
>>>> [image: Inline image 2]
>>>>
>>>> When I run this script, it creates the exact same taxa node 94 times! I 
>>>> did a quick grep in my CSV to find that there were 94 instances of that 
>>>> taxa. So, the script essentially created a new node each time it 
>>>> encountered a species. I also created some scaffold, locii, COG, PFam and 
>>>> Project nodes much the same way but only unique nodes were created in all 
>>>> the other instances. The only difference was that the property "id" was 
>>>> "$species" which is a text value with spaces in case of Taxa but for all 
>>>> others it was an alphanumeric without spaces, but I don't see how this 
>>>> could affect the outcome.
>>>>
>>>> I apologize for the lengthy email.
>>>>
>>>> ================
>>>> Linux RHEL Server 6.5
>>>> Perl 5.18
>>>> Neo4j 2.1.7
>>>> Java 1.7
>>>> ================
>>>> --
>>>> Sunit Jain
>>>> Research Computing Specialist -- Bioinformatics
>>>> Michigan Geomicrobiology Lab
>>>> Dept. of Earth & Environmental Sciences,
>>>> University of Michigan,
>>>> Ann Arbor, MI, USA.
>>>> web: www.sunitjain.com
>>>> meet: www.sunitjain.com/contact
>>>>
>>>  -- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "Neo4j" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/neo4j/QXep2b3ncMs/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected].
>>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to