如何设置使用的CouchDB在ElasticSearch在Ubuntu 13.10 VPS

本文将教你如何设置的CouchDB与ElasticSearch的Ubuntu 13.10 VPS。

介绍


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对数据进行全文本查询。