Elastic Search on Rails

Elastic Search is a mirror DB with indexes of your existing DB, which is searchable trough JSON API. In order to perform the search you will need to have the data synced between your DB and Elastic Search. This can be done via rivers to pull data from your application or to push data to your ES node via _bulk operations.

But let’s start from beginning:

Download Elastic Search deb

cd /usr/share/elasticsearch

 # To install Marvel inside development enviroment
sudo bin/plugin -i elasticsearch/marvel/latest

# In same directory run ES 
bin/elasticsearch -d

#Check if it's working
localhost:9200

Keeping data in sync

The simple way:

class Article
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks
end

The more complex way would be:

# 1. Bind callbacks
 after_commit on: [:create] do
  index_document if self.published?
 end

after_commit on: [:update] do
 update_document if self.published?
end

after_commit on: [:destroy] do
  delete_document if self.published?
end

Using async commands – a way to go

Please refer to
https://github.com/elasticsearch/elasticsearch-rails/tree/master/elasticsearch-     model

JDBC plugin for Elastic Search

The Java Database Connection (JDBC) plugin allows fetching data from JDBC sources for indexing into Elastic Search.

https://github.com/jprante/elasticsearch-river-jdbc

You can setup a script that pulls data from MySQL into ES. You will have to write custom SQL queries to do so.

Marvel Plugin

#Check Marvel plugin
http://any-server-in-cluster:9200/_plugin/marvel/.

Java versions

We recommend installing the Java 8 update 20 or later, or Java 7 update 55 or later. Previous versions of Java 7 are known to have bugs that can cause index corruption and data loss.

Hosted solutions

https://qbox.io/

Some references:

http://serverfault.com/questions/386557/how-to-index-mysql-from-elasticsearch