++ed by:
MAJENSEN CKRAS CJFIELDS

3 PAUSE users
3 non-PAUSE users.

Author image Mark Allen Jensen
and 5 contributors

NAME

REST::Neo4p::Index - Neo4j index object

SYNOPSIS

 $node_idx = REST::Neo4p::Index->new('node', 'my_node_index');
 $rel_idx = REST::Neo4p::Index->new('relationship', 'my_rel_index');
 $fulltext_idx = REST::Neo4p::Index->new('node', 'my_ft_index',
                                    { type => 'fulltext',
                                      provider => 'lucene' });
 $node_idx->add_entry( $ShaggyNode, 'pet' => 'ScoobyDoo' );
 $node_idx->add_entry( $ShaggyNode,
   'pet' => 'ScoobyDoo',
   'species' => 'Dog',
   'genotype' => 'ScSc',
   'episodes_featured' => 2343 );

 @returned_nodes = $node_idx->find_entries('pet' => 'ScoobyDoo');
 @returned_nodes = $node_idx->find_entries('pet:Scoob*');
 $node_idx->remove_entry( $JosieNode, 'hair' => 'red' );

DESCRIPTION

REST::Neo4p::Index objects represent Neo4j node and relationship indexes.

USAGE NOTE - VERSION 4.0

TL;DR - Using indexes in REST::Neo4p on Neo4j 4.0 should just work.

Index objects were originally designed to encapsulate Neo4j "explicit" indexes, which map nodes/relationships to a key-value pair.

As of Neo4j version 4.0, explicit indexes are not supported. Since there may be applications using REST::Neo4p depending on the Index functionality, the agent based on Neo4j::Driver uses fulltext indexes under the hood to emulate explicit indexes. This agent is used automatically with Neo4j version 4.0 servers.

METHODS

new()
 $node_idx = REST::Neo4p::Index->new('node', 'my_node_index');
 $rel_idx = REST::Neo4p::Index->new('relationship', 'my_rel_index');
 $fulltext_idx = REST::Neo4p::Index->new('node', 'my_ft_index',
                                    { type => 'fulltext',
                                      provider => 'lucene' });
 # Neo4j 4.0+
 $rel_idx = REST::Neo4p::Index->new('relationship', 'my_rel_index', {rtype => "my_reln_type"});

Creates a new index of the type given in the first argument, with the name given in the second argument. The optional third argument is a hashref containing an index configuration as provided for in the Neo4j API.

Note: For Neo4j 4.0+, REST::Neo4p emulates an explicit index using a fulltext index. Fulltext indexes on relationships require specifying a relationship type. To do this, include the key rtype in the third argument hashref.

remove()
 $index->remove()

CAUTION: This method removes the index from the database and destroys the object.

name()
 $idx_name = $index->name()
type()
 if ($index->type eq 'node') { $index->add_entry( $node, $key => $value ); }
add_entry()
 $index->add_entry( $node, $key => $value );
 $index->add_entry( $node, $key1 => $value1, $key2 => $value2,...);
 $index->add_entry( $node, $key_value_hashref );
remove_entry()
 $index->remove_entry($node);
 $index->remove_entry($node, $key);
 $index->remove_entry($node, $key => $value);
find_entries()
 @returned_nodes = $node_index->find_entries($key => $value);
 @returned_rels = $rel_index->find_entries('pet:Scoob*');

In the first form, an exact match is sought. In the second (i.e., when a single string argument is passed), the argument is interpreted as a query string and passed to the index as such. The Neo4j default is Lucene.

find_entries() is not supported in batch mode.

create_unique()
 $node = $index->create_unique( name => 'fred', 
                                { name => 'fred', state => 'unshaven'} );

 $reln = $index->create_unique( name => 'married_to',
                                $node => $wilma_node,
                                'MARRIED_TO');

Creates a unique node or relationship on the basis of presence or absence of a matching item in the index.

Optional final argument: one of 'get' or 'fail'. If 'get' (default), the matching item is returned if present. If 'fail', false is returned.

SEE ALSO

REST::Neo4p, REST::Neo4p::Relationship, REST::Neo4p::Node.

AUTHOR

    Mark A. Jensen
    CPAN ID: MAJENSEN
    majensen -at- cpan -dot- org

LICENSE

Copyright (c) 2012-2020 Mark A. Jensen. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.