使用ElasticSearch索引mongoDB

时间:2013-11-19 19:18:48

标签: mongodb elasticsearch

我已经拥有MongoDB并使用Mongoriver安装了Elasticsearch。所以我建立了我的河流:

$ curl -X PUT localhost:9200/_river/database_test/_meta -d '{
  "type": "mongodb",
  "mongodb": {
    "servers": [
      {
        "host": "127.0.0.1",
        "port": 27017
      }
    ],
    "options": {
      "secondary_read_preference": true
    },
    "db": "database_test",
    "collection": "event"
  },
  "index": {
    "name": "database_test",
    "type": "event"
  }
}'

我只想获得country:Canada的事件,所以我尝试:

$ curl -XGET 'http://localhost:9200/database_test/_search?q=country:Canada'

我得到了:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

我在网上搜索,我读到我应该首先使用Elasticsearch索引我的收藏(丢失链接)。我应该索引我的Mongodb吗?我该怎么做才能从现有的MongoDB集合中获得结果?

1 个答案:

答案 0 :(得分:18)

mongodb river依赖于MongoDB的操作日志来索引文档,因此需要将mongo数据库创建为副本集。我假设你错过了它,所以当你创建河流时,初始导入看不到索引。我也假设您使用的是Linux,并且掌握了shell cli工具,请试试这个:

请按照以下步骤操作:

  • 确保还安装了映射器附件Elasticsearch插件
  • 使用mongodump
  • 备份数据库
  • 编辑mongodb.conf(通常在/etc/mongodb.conf中,但在安装方式上有所不同)并添加以下行:

    replSet = rs0

    “rs0”是复制品的名称,可以是您喜欢的任何名称。

  • 重新启动你的mongo然后登录它的控制台。类型:

    rs.initiate()
    rs.slaveOk()

提示将更改为rs0:PRIMARY>

  • 现在就像在问题中一样创建你的河流并使用mongorestore恢复你的数据库。 Elasticsearch应该索引您的文档。

我建议使用此插件:http://mobz.github.io/elasticsearch-head/来浏览您的索引和河流,并确保您的数据已编入索引。

如果这不起作用,请发布您用于mongodb-river-plugin,elasticsearch和mongodb的版本。