在elasticsearch索引中重命名doctype

时间:2017-10-17 12:11:57

标签: elasticsearch elasticsearch-dsl elasticsearch-py elasticsearch-dsl-py

我使用elasticsearch-py将由Django模型表示的数百万条记录从PostgreSQL移动到Elasticsearch。 我使用了doctype模型的名称(在CamelCase中)。

然后我切换到Elasticsearch DSL并注意到默认情况下它会创建带有下划线(snake_case)的小写名称的doctypes。

我不想在我的文档元中重新定义doc_type,所以我要在Elasticsearch中重命名它。最快的方法是什么?

1 个答案:

答案 0 :(得分: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()