我有以下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的本质以及它如何导致这一问题的信念。