0

我使用了elasticsearch-py將Django模型表示的數百萬條記錄從PostgreSQL移動到Elasticsearch。 我使用了doctype模型的名字(這是在CamelCase中)。在elasticsearch索引中重命名doctype

然後,我切換到Elasticsearch DSL,並注意到它默認情況下會創建帶有下劃線的小寫字母(snake_case)的文檔類型。

我不想在我的文檔meta中重新定義doc_type,所以我要在Elasticsearch中重命名它。什麼是最快的方式來做到這一點?

回答

1

使用elasticsearch_dsl自己的解決方案:

from elasticsearch.helpers import bulk 
from elasticsearch_dsl import Search 
from elasticsearch_dsl.connections import connections 


connection = connections.get_connection()  
s = Search(index=index, doc_type=old_name) 

actions = (dict(
    _index=hit.meta.index, _type=new_name, 
    _id=hit.meta.id, _source=hit.to_dict() 
) for hit in s.scan()) 
bulk(connection, actions, request_timeout=300) 
s.params(request_timeout=600).delete() 
+0

需要注意的是,你並不需要集體行動成塊自己,'bulk'助手已經這樣做,你可以直接給它一個迭代器(按發電機這種情況下)會消耗'scan'結果並''yield出修改後的文檔。 –

+0

謝謝@HonzaKrál。更新。 – utapyngo