2016-04-08 5 views
1

mongo-connectorを使用して、mongoDB replicaSetのデータをelast2-doc-managerとDoc Managerで同期させています。印刷する方法File "/usr/local/lib/python2.7/dist-packages/mongo_connector/doc_managers/elastic2_doc_manager.py" Line 148を包む以外/弾性検索エンジンmongo-connector KeyError _id

Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner 
    self.run() 
    File "/usr/local/lib/python2.7/dist-packages/mongo_connector/util.py", line 85, in wrapped 
    func(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/mongo_connector/oplog_manager.py", line 261, in run 
    docman.upsert(doc, ns, timestamp) 
    File "/usr/local/lib/python2.7/dist-packages/mongo_connector/util.py", line 32, in wrapped 
    return f(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/mongo_connector/doc_managers/elastic2_doc_manager.py", line 150, in upsert 
    doc_id = u(doc.pop("_id")) 

私が試しを追加しました:私はこの例外を取得するいくつかの時点で

$mongo-connector --auto-commit-interval=5 --verbose -m 127.0.0.1:27017 -t localhost:9200 -d elastic2_doc_manager --namespace-set=db.collection1,db.collection2 --fields=f1,f2,f3 

:として

私はMongoのコネクタを実行していますよ例外の場合の問題のある文書

どういうわけか_idが印刷されたドキュメントにありません。しかし、対話型のcmdから直接mongoに問い合わせると、同じ文書を取り出すことができ、_idのキーが存在します。

なぜ、mongo-connector/elastic2_doc_managerには、一部のドキュメントの_idプロパティが表示されないのかわかりません。

答えて

0

Mongoコネクタは何らかの理由でドキュメントから_idを削除しているようです。しかし、mongodbからのObjectIdの文字列表現は、elasticsearchの_idとして格納されます。しかしそれはまだ文書にはない、あるいはelasticsearchはそれを "源"と呼ぶだろう。

クエリの結果を見てみましょう、それがこのような何か構造化されます:私はモンゴ-コネクタが目的でこれをやったという印象の下にあった

{ 
    "took" : 7, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 3, 
    "successful" : 3, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 135513, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "myIndex", 
     "_type" : "myType", 
     "_id" : "5294b93e6c255bb82d0000c0", <-- ID from mongodb 
     "_score" : 1.0, 
     "_source":{ 
     "some": "data", 
     "my": "document" 
     }, 
     { 
     "_index" : "myIndex", 
     "_type" : "myType", 
     "_id" : "5294b93e6c255bb82d0000de", <-- ID from mongodb 
     "_score" : 1.0, 
     "_source":{ 
     "some": "data2", 
     "my": "document2" 
     } 
    }] 
    } 
} 

を。適切なESフィールドに_idを格納するだけですが、文書の_sourceから_idも削除する理由はありません。しかし、私はelastic_doc_manager(v1)を使用している間、ESの文書にIDがないことに気付きました。