2016-04-08 27 views
1

mongoDB replicaSet ile elast2-doc-manager'ı Doc Manager olarak eşzamanlamak için mongo-bağlayıcı kullanıyorum. yazdırmak için yöntem File "/usr/local/lib/python2.7/dist-packages/mongo_connector/doc_managers/elastic2_doc_manager.py" Line 148 sarma haricinde/Elasticsearch mongo-bağlayıcı 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")) 

Ben bir deneyin ekledik: Bu durum almak Bir noktada

$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 

: olarak

Ben Mongo-konektörü koşuyorum istisna durumunda sorunlu belge.

Bazı durumlarda, _id yazdırılan belgeden eksik. Ancak mongo'yu doğrudan etkileşimli cmd'den sorguladığımda, aynı belgeyi getirebilir ve _id anahtarı bulunur.

Bazı belgeler için neden mongo-connector/elastic2_doc_manager'un neden _id özelliğini görmediğini bilmiyorum.

cevap

0

Mongo bağlantı herhangi bir nedenle, _id dokümandan silmiş görünüyor. Bununla birlikte, ObjectId'nin mongodb'den dize temsili, elastics aramada _id olarak saklanır. Halen belgede yok, ya da elasticsearch ona "kaynak" dan bahsediyor.

bir sorgu sonucu bir göz atın

, böyle bir şey yapılandırılmış olacak:

{ 
    "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" 
     } 
    }] 
    } 
} 

bilerek yaptım-konnektör Mongo izlenim oldu. _id dosyasını uygun ES alanında saklamak için, _id dosyasını belgenin _source numaralı satırından da kaldırmam için bir neden göremiyorum. Ancak, elastik_doc_manager (v1) kullanırken ES'deki belgelerindeki kimlik eksikliğini fark ettim.