介绍
CouchDB
CouchDB是一个NoSQL数据库,将数据存储为JSON文档。 在模式会引起头痛并且需要灵活的数据模型的情况下,这是非常有用的。 CouchDB还支持主 - 主连续复制,这意味着数据可以在两个数据库之间连续复制,而无需设置主数据库和从数据库的复杂系统。
ElasticSearch
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
初始设置
安装最新版本的headless 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备份
启动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对数据进行全文本查询。