繁体   English   中英

使用ElasticSearch索引mongoDB

[英]Index mongoDB with 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事件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集合中获取结果?

mongodb河依赖于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的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM