我使用elasticsearch-py将由 Django 模型表示的数百万条记录从 PostgreSQL 移动到 Elasticsearch。我将模型的名称用于 doctype(在 CamelCase 中)。
然后我切换到Elasticsearch DSL并注意到默认情况下它会创建带有下划线 (snake_case) 的小写名称的文档类型。
我不想doc_type
在我的文档元中重新定义,所以我要在 Elasticsearch 中重命名它。最快的方法是什么?
我使用elasticsearch-py将由 Django 模型表示的数百万条记录从 PostgreSQL 移动到 Elasticsearch。我将模型的名称用于 doctype(在 CamelCase 中)。
然后我切换到Elasticsearch DSL并注意到默认情况下它会创建带有下划线 (snake_case) 的小写名称的文档类型。
我不想doc_type
在我的文档元中重新定义,所以我要在 Elasticsearch 中重命名它。最快的方法是什么?
我自己的解决方案使用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()