如何在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。

提交者: [[“%3Ca|http]] ://blog.opendev.io [[“%3C/a|”>库珀·汤普森]]