mongo-connector不会将MongoDB ReferenceField字段同步到Elasticsearch

时间:2017-03-10 16:08:47

标签: mongodb python-3.x elasticsearch indexing config

我有以下dockerized setup标记为latest:

+---------+    +-----------------+    +---------------+
| MongoDB |––––| mongo-connector |––––| Elasticsearch |
+---------+    +-----------------+    +---------------+

我已按如下方式配置mongo-connector:

{
   "mainAddress": "mongodb://mongodb:27017",
   "oplogFile": "/var/log/mongo-connector/oplog.timestamp",
   "noDump": false,
   "batchSize": -1,
   "verbosity": 2,
   "continueOnError": false,
   "namespaces": {
      "db.language": true,
      "db.tag": {
         "includeFields": ["name"]
      },
      "db.blogpost": {
         "includeFields": ["name", "content", "languages", "tags.name"]
      },
      "db.user": {
         "includeFields": ["username", "description"]
      },
      "db.comment": {
         "includeFields": ["text"]
      }
   },
   "logging": {
      "type": "file",
      "filename": "/var/log/mongo-connector/mongo-connector.log",
      "format": "%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s",
      "rotationWhen": "D",
      "rotationInterval": 1,
      "rotationBackups": 10
   },
   "docManagers": [
      {
         "docManager": "elastic2_doc_manager",
         "targetURL": "elasticsearch:9200"
      }
   ]
}

现在,mongo-connector应该让Elasticsearch与MongoDB保持同步。到目前为止,一切都很顺利。但是,我遇到了名称空间嵌套字段的问题。在配置中给出的示例中,它使用tags.name。从配置中可以看到tag本身就是一个集合。

在我的python代码中,blogpost集合中的标记实现为tags = ListField(ReferenceField('Tag'))

问题是elasticsearch索引中没有标记名称。我不太确定这个问题是否是由于ReferenceField的性质,因为ReferenceField只存储ObjectId。

有关如何解决此问题的任何建议?

  • 我不太清楚如何从这一点开始。

  • 我想要一个需要我更改配置的解决方案。

到目前为止我测试过的事情:

我在配置中将"tags.name"更改为"tags",最终得到了一个ObjectIds列表。这一发现证实了我对ReferenceField的本质以及它如何导致这一问题的信念。

0 个答案:

没有答案