Ubuntu13.10VPSでElasticSearchを使用してCouchDBを設定する方法
序章
CouchDB
CouchDBは、データをJSONドキュメントとして保存するNoSQLデータベースです。 スキーマが頭痛の種になり、柔軟なデータモデルが必要な状況で非常に役立ちます。 CouchDBは、マスター-マスター連続レプリケーションもサポートしています。つまり、マスターデータベースとスレーブデータベースの複雑なシステムをセットアップしなくても、2つのデータベース間でデータを継続的にレプリケートできます。
ElasticSearch
ElasticSearchは、すべてにインデックスを付け、ほとんどすべてのものを検索可能にする全文検索エンジンです。 これはCouchDBで非常にうまく機能します。CouchDBの制限の1つは、すべてのクエリでドキュメントIDを知っているか、map/reduceを使用する必要があることです。
CouchDBのインストール
最新バージョンを入手するために、ソースからCouchDBをインストールします。 これに関するより完全なチュートリアルは、ここで見ることができます。
環境の設定
パッケージマネージャーを更新します。
apt-get update
カウチをコンパイルするためのツールをインストールします。
apt-get install -y build-essential
CouchDBが書かれているプログラミング言語であるErlangをインストールします。
apt-get install -y erlang-base erlang-dev erlang-nox erlang-eunit
CouchDBに必要な残りのライブラリをインストールします。
apt-get install -y libmozjs185-dev libicu-dev libcurl4-gnutls-dev libtool
ソースファイルを取得する
CouchDBソースファイルが存在するディレクトリに移動します。
cd /usr/local/src
ソースファイルを取得します。
curl -O http://apache.mirrors.tds.net/couchdb/source/1.5.0/apache-couchdb-1.5.0.tar.gz
ソースファイルを解凍します。
tar xvzf apache-couchdb-1.5.0.tar.gz
新しいディレクトリに移動します。
cd apache-couchdb-1.5.0
ソースを構成してインストールします。
./configure
make && make install
注:この手順には時間がかかる場合があります。 完了すると、CouchDBが完全にインストールされます。 次に、適切なユーザーを作成し、権限を割り当てる必要があります
CouchDBのインストールの完了
CouchDBユーザーを作成します。
adduser --disabled-login --disabled-password --no-create-home couchdb
注:必要に応じて、名前などを尋ねるプロンプトは無視できます。 それぞれのデフォルト値を使用できます。
CouchDBユーザーに適切な権限を割り当てます。
chown -R couchdb:couchdb /usr/local/var/log/couchdb /usr/local/var/lib/couchdb /usr/local/var/run/couchdb
CouchDBをサービスとしてセットアップして、手動で開始する必要がないようにします。
ln -s /usr/local/etc/init.d/couchdb /etc/init.d
update-rc.d couchdb defaults
CouchDBを起動します。
service couchdb start
CouchDBが実行されていることを確認します
curl localhost:5984
次で始まる応答が表示されます。
{"couchdb":"Welcome"...
ElasticSearchのインストール
初期設定
ヘッドレスopen-jdkの最新バージョンをインストールします。
apt-get install openjdk-7-jre-headless
ElasticSearchの最新バージョンを入手します。
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.8.deb
パッケージをインストールします。
dpkg -i elasticsearch-0.90.8.deb
続行する前に、Elasticsearchを構成して、パブリックインターネットにアクセスできないようにする必要があります。Elasticsearchにはセキュリティが組み込まれておらず、HTTPAPIにアクセスできるすべてのユーザーが制御できます。 これは、elasticsearch.yml
を編集することで実行できます。 パッケージとともにインストールしたと仮定して、次のコマンドで構成を開きます。
sudo vi /etc/elasticsearch/elasticsearch.yml
次に、network.bind_host
を指定する行を見つけ、コメントを外して値をlocalhost
に変更し、次のようにします。
network.bind_host: localhost
次に、ファイルのどこかに次の行を挿入して、動的スクリプトを無効にします。
script.disable_dynamic: true
保存して終了。 次に、Elasticsearchを再起動して、変更を有効にします。
sudo service elasticsearch restart
ElasticSearchが実行されていることを確認します(リクエストが最初に失敗した場合は、再試行してください。 開始するまでに少し時間がかかる場合があります):
curl http://127.0.0.1:9200
次で始まる応答が表示されます。
{ "ok" : true, "status" : 200,
ElasticSearchがインデックスを保存する場所を変更する
ElasticSearchを停止します:
/etc/init.d/elasticsearch stop
新しいディレクトリを作成します。
mkdir /var/data/
mkdir /var/data/elasticsearch
ディレクトリの所有権を「elasticsearch」ユーザーに変更します。
chown elasticsearch /var/data/elasticsearch
グループを変更します。
chgrp elasticsearch /var/data/elasticsearch
新しいデータディレクトリを反映するようにElasticSearch構成ファイルを変更します
nanoを使用してElasticSearch構成ファイルを開きます。
nano /etc/default/elasticsearch
以下を含む行を変更します。
DATA_DIR=
に
DATA_DIR= /var/data/elasticsearch
ファイルを保存して閉じます。
2つを一緒に機能させる
ElasticSearch用のCouchDBRiverプラグインをインストールします
ElasticSearchディレクトリに移動します。
cd /usr/share/elasticsearch/
プラグインをインストールします。
./bin/plugin -install elasticsearch/elasticsearch-river-couchdb/1.2.0
ElasticSearchバックアップを開始します
ElasticSearchを開始します:
/etc/init.d/elasticsearch start
CouchDBデータベースとElasticSearchインデックスを作成します
CouchDBにいくつかのものを入れる
CouchDBデータベースを作成します。
curl -X PUT http://127.0.0.1:5984/testdb
いくつかのテストドキュメントを作成します。
curl -X PUT 'http://127.0.0.1:5984/testdb/1' -d '{"name":"My Name 1"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/2' -d '{"name":"My Name 2"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/3' -d '{"name":"My Name 3"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/4' -d '{"name":"My Name 4"}'
データベースを使用してElasticSearchをセットアップする
インデックスを作成します。
curl -X PUT '127.0.0.1:9200/_river/testdb/_meta' -d '{ "type" : "couchdb", "couchdb" : { "host" : "localhost", "port" : 5984, "db" : "testdb", "filter" : null }, "index" : { "index" : "testdb", "type" : "testdb", "bulk_size" : "100", "bulk_timeout" : "10ms" } }'
試して!
ElasticSearchでテストクエリを実行します。
curl http://127.0.0.1:9200/testdb/testdb/_search?pretty=true
これに似たものが表示されるはずです。
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 4,
"max_score" : 1.0,
"hits" : [ {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "4",
"_score" : 1.0, "_source" : {"_rev":"1-7e9376fc8bfa6b8c8788b0f408154584","_id":"4","name":"My Name 4"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "1",
"_score" : 1.0, "_source" : {"_rev":"1-87386bd54c821354a93cf62add449d31","_id":"1","name":"My Name"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "2",
"_score" : 1.0, "_source" : {"_rev":"1-194582c1e02d84ae36e59f568a459633","_id":"2","name":"My Name 2"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "3",
"_score" : 1.0, "_source" : {"_rev":"1-62a53c50e7df02ec22973fc802fb9fc0","_id":"3","name":"My Name 3"}
} ]
}
}
これで、map / reduceまたは各ドキュメントの_idの使用に限定されるのではなく、ElasticSearchを使用してデータに対してフルテキストクエリを実行できます。