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