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

介绍


CouchDB 的


CouchDB 是一个 NoSQL 数据库,将数据存储为 JSON 文档,它非常有用,在一个方案会导致头痛的情况下,需要灵活的数据模型,CouchDB 还支持主机连续复制,这意味着数据可以在两个数据库之间连续复制,而无需设置复杂的主机和奴隶数据库系统。

弹性搜索


ElasticSearch 是一个全文本搜索引擎,可以索引所有内容,并且几乎可以搜索任何内容,这与 CouchDB 非常有效,因为 CouchDB 的一个局限性是,对于所有查询,您必须要么知道文档 ID,要么使用 map/reduce。

安装CouchDB


我们将从源头上安装CouchDB以获得最新版本. 可以查看有关此方面的更详细的教程 在这里

设置环境


更新包管理器:

1apt-get update

安装工具来编译沙发:

1apt-get install -y build-essential

安装Erlang,这是CouchDB编写的编程语言:

1apt-get install -y erlang-base erlang-dev erlang-nox erlang-eunit

安装 CouchDB 所需的其他库:

1apt-get install -y libmozjs185-dev libicu-dev libcurl4-gnutls-dev libtool

Aquire 源文件


转到 CouchDB 源文件所在的目录:

1cd /usr/local/src

获取源文件:

1curl -O http://apache.mirrors.tds.net/couchdb/source/1.5.0/apache-couchdb-1.5.0.tar.gz

引入源文件:

1tar xvzf apache-couchdb-1.5.0.tar.gz

进入新目录:

1cd apache-couchdb-1.5.0

配置源并安装它:

1./configure
2make && make install

注意:此步骤可能需要一段时间。完成后,CouchDB 将完全安装。现在我们需要创建适当的用户并分配权限。

完成 CouchDB 安装


创建一个 CouchDB 用户:

1adduser --disabled-login --disabled-password --no-create-home couchdb

注意: 如果您想要,可以忽略请求姓名等内容的提示,您可以使用每个值的默认值。

向 CouchDB 用户分配相应的权限:

1chown -R couchdb:couchdb /usr/local/var/log/couchdb /usr/local/var/lib/couchdb /usr/local/var/run/couchdb

将 CouchDB 设置为服务,以免需要手动启动:

1ln -s /usr/local/etc/init.d/couchdb  /etc/init.d
2update-rc.d couchdb defaults

启动CouchDB:

1service couchdb start

检查 CouchDB 是否正在运行

1curl localhost:5984

你应该看到一个开始于:

1{"couchdb":"Welcome"...

安装 ElasticSearch


初始设置


安装最新的 headless open-jdk 版本:

1apt-get install openjdk-7-jre-headless

获取最新的 ElasticSearch 版本:

1wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.8.deb

安装包:

1dpkg -i elasticsearch-0.90.8.deb

在继续之前,您需要配置 Elasticsearch 以便无法访问公共互联网 - Elasticsearch 没有内置的安全性,可以由任何可以访问 HTTP API 的用户控制。

1sudo vi /etc/elasticsearch/elasticsearch.yml

然后找到指定network.bind_host的行,然后放弃评论并将值更改为localhost,以便它看起来如下:

1network.bind_host: localhost

然后在文件中插入以下行,以禁用动态脚本:

1script.disable_dynamic: true

现在重新启动 Elasticsearch 以实施更改:

1sudo service elasticsearch restart

检查 ElasticSearch 是否正在运行(如果请求第一次失败,请再次尝试。

1curl http://127.0.0.1:9200

你应该看到一个开始于:

1{ "ok" : true, "status" : 200,

更改 ElasticSearch 存储指数的位置


停止ElasticSearch:

1/etc/init.d/elasticsearch stop

创建新目录:

1mkdir /var/data/
2mkdir /var/data/elasticsearch

将目录的所有权更改为elasticsearch用户:

1chown elasticsearch /var/data/elasticsearch

更改组:

1chgrp elasticsearch /var/data/elasticsearch

更改 ElasticSearch 配置文件以反映新数据目录


使用 nano 打开 ElasticSearch 配置文件:

1nano /etc/default/elasticsearch

更改包含的线条:

1DATA_DIR=

1DATA_DIR= /var/data/elasticsearch

保存并关闭文件。

让两个人一起工作


安装用于 ElasticSearch 的 CouchDB 河流插件


导航到 ElasticSearch 目录:

1cd /usr/share/elasticsearch/

安装 Plugin:

1./bin/plugin -install elasticsearch/elasticsearch-river-couchdb/1.2.0

启动 ElasticSearch 备份


启动 ElasticSearch:

1/etc/init.d/elasticsearch start

创建CouchDB数据库和ElasticSearch索引


将一些东西放入CouchDB


创建 CouchDB 数据库:

1curl -X PUT http://127.0.0.1:5984/testdb

创建一些测试文件:

1curl -X PUT 'http://127.0.0.1:5984/testdb/1' -d '{"name":"My Name 1"}' 
2curl -X PUT 'http://127.0.0.1:5984/testdb/2' -d '{"name":"My Name 2"}' 
3curl -X PUT 'http://127.0.0.1:5984/testdb/3' -d '{"name":"My Name 3"}' 
4curl -X PUT 'http://127.0.0.1:5984/testdb/4' -d '{"name":"My Name 4"}'

设置 ElasticSearch 与数据库


创建索引:

1curl -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 进行测试查询:

1curl http://127.0.0.1:9200/testdb/testdb/_search?pretty=true

你应该看到类似于此的东西:

 1{
 2  "took" : 4,
 3  "timed_out" : false,
 4  "_shards" : {
 5    "total" : 5,
 6    "successful" : 5,
 7    "failed" : 0
 8  },
 9  "hits" : {
10    "total" : 4,
11    "max_score" : 1.0,
12    "hits" : [ {
13      "_index" : "testdb",
14      "_type" : "testdb",
15      "_id" : "4",
16      "_score" : 1.0, "_source" : {"_rev":"1-7e9376fc8bfa6b8c8788b0f408154584","_id":"4","name":"My Name 4"}
17    }, {
18      "_index" : "testdb",
19      "_type" : "testdb",
20      "_id" : "1",
21      "_score" : 1.0, "_source" : {"_rev":"1-87386bd54c821354a93cf62add449d31","_id":"1","name":"My Name"}
22    }, {
23      "_index" : "testdb",
24      "_type" : "testdb",
25      "_id" : "2",
26      "_score" : 1.0, "_source" : {"_rev":"1-194582c1e02d84ae36e59f568a459633","_id":"2","name":"My Name 2"}
27    }, {
28      "_index" : "testdb",
29      "_type" : "testdb",
30      "_id" : "3",
31      "_score" : 1.0, "_source" : {"_rev":"1-62a53c50e7df02ec22973fc802fb9fc0","_id":"3","name":"My Name 3"}
32    } ]
33  }
34}

现在,而不是仅限于使用每个文档的 map/reduce 或 _id,您可以使用 ElasticSearch 对数据进行完整文本查询。

Submitted by: Cooper Thompson
Published At
Categories with 技术
comments powered by Disqus