如何在Ubuntu13.10VPS上使用ElasticSearch设置CouchDB
介绍
沙发数据库
CouchDB 是一个 NoSQL 数据库,将数据存储为 JSON 文档。 在架构会引起麻烦并且需要灵活的数据模型的情况下,它非常有用。 CouchDB 还支持主从连续复制,这意味着数据可以在两个数据库之间连续复制,而无需设置复杂的主从数据库系统。
弹性搜索
ElasticSearch 是一个全文搜索引擎,它可以索引所有内容并使几乎所有内容都可搜索。 这对 CouchDB 非常有效,因为 CouchDB 的限制之一是对于所有查询,您必须知道文档 ID 或者您必须使用 map/reduce。
安装 CouchDB
我们将从源代码安装 CouchDB 以获得最新版本。 可以在 此处 查看有关此内容的更全面的教程。
设置环境
更新包管理器:
apt-get update
安装编译沙发的工具:
apt-get install -y build-essential
安装 Erlang,编写 CouchDB 的编程语言:
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,使其无法被公共 Internet 访问——Elasticsearch 没有内置的安全性,并且可以由任何可以访问 HTTP API 的人控制。 这可以通过编辑 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
保存并关闭文件。
让两者一起工作
为 ElasticSearch 安装 CouchDB River 插件
导航到 ElasticSearch 目录:
cd /usr/share/elasticsearch/
安装插件:
./bin/plugin -install elasticsearch/elasticsearch-river-couchdb/1.2.0
启动 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"} } ] } }
现在,您可以使用 ElasticSearch 对您的数据进行全文查询,而不是仅限于使用 map/reduce 或每个文档的 _id。