neo4j-contrib / neo4j-elasticsearch

Neo4j ElasticSearch Integration
Apache License 2.0
211 stars 79 forks source link

== Neo4j Elastic{Search} Integration

image:https://travis-ci.org/neo4j-contrib/neo4j-elasticsearch.svg?branch=3.1["Build Status", link="https://travis-ci.org/neo4j-contrib/neo4j-elasticsearch"]

Integrates Neo4j change-feed with an ElasticSearch cluster.

The different versions of Neo4j (2.2.x, 2.3.x, 3.0.x, and 3.1.x are supported on different branches).

=== Approach

This Neo4j Kernel Extension updates an ElasticSearch instance or cluster with changes in the graph.

A transaction event listener checks changed Nodes against a given label, renders the whole node as json document and indexes all changes in bulk with ES.

=== Installation

=== Example

Suppose that we keep nodes in our Neo4j instance labeled Person and Place, and that we want to index the values of the first_name and last_name properties of the former and name of the latter in two separate ElasticSearch indices named people and places. For that, we would add the following directives to conf/neo4j.conf:


elasticsearch.host_name=http://localhost:9200 elasticsearch.index_spec=people:Person(first_name,last_name), places:Place(name)

With that in place, Neo4j will now track changes to nodes labeled Person or Place and keep our ES instance running on localhost:9200 in sync.

To perform an initial import, you can force a commit by executing a Cypher query like:


MATCH n:Person SET n.first_name = n.first_name, n.last_name = n.last_name;

MATCH n:Place SET n.name = n.name;

==== ID / Labels fields By default, the indexes created will contain fields for the Neo4j ID and Labels, named id and labels. These will be auto-created as searchable fields, but, if you'd prefer they not be included, simply add one or both of these lines to your conf/neo4j.conf file.

elasticsearch.include_id_field=false
elasticsearch.include_labels_field=false

=== Discovery By default discovery (discovering of nodes within a cluster) is turned off. If you would like to turn discovery on, use the discovery option.

elasticsearch.discovery=true

=== Developing

To run the tests, run mvn test. Make sure that an elastic{search} server is running on localhost:9200.

=== Todo