Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/neo4j-contrib/neo4j-elasticsearch
- Owner: neo4j-contrib
- License: apache-2.0
- Created: 2015-04-26T17:02:39.000Z (almost 10 years ago)
- Default Branch: 3.4
- Last Pushed: 2020-10-13T04:37:55.000Z (over 4 years ago)
- Last Synced: 2024-08-02T07:10:36.895Z (6 months ago)
- Language: Java
- Size: 64.5 KB
- Stars: 210
- Watchers: 32
- Forks: 79
- Open Issues: 29
-
Metadata Files:
- Readme: readme.adoc
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-neo4j - neo4j-elasticsearch - Neo4j ElasticSearch Integration. (REST API / Other)
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