介绍
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 对数据进行完整文本查询。