Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/neo4j-contrib/neo4j-elasticsearch

Neo4j ElasticSearch Integration
https://github.com/neo4j-contrib/neo4j-elasticsearch

Last synced: 3 months ago
JSON representation

Neo4j ElasticSearch Integration

Awesome Lists containing this project

README

        

== 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

* Download the jar from the https://github.com/neo4j-contrib/neo4j-elasticsearch/releases[latest release].
* Copy to `$NEO4J_HOME/plugins` or for Neo4j community to the plugins folder that you find on the `Options` pane.
* Modify `$NEO4J_HOME/conf/neo4j.conf` accordingly (see the Example section)
* Restart Neo4j

=== 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

* Support indexing of relationships