0

私はelasticsearch-pyを使用して、Djangoモデルで表される何百万ものレコードをPostgreSQLからElasticsearchに移行しました。 doctype(CamelCaseにある)のモデルの名前を使用しました。elasticsearchインデックスのdoctypeの名前を変更

次に、Elasticsearch DSLに切り替え、デフォルトでは小文字の名前を持つdoctypesがアンダースコア(snake_case)で作成されていることに気付きました。

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'ヘルパーはすでにあなたが直接イテレータ(ジェネレータを、それを養うことができることを行いますこの場合)、 'スキャン 'の結果を消費し、変更されたドキュメントを' yield'します。 –

+0

ありがとう@HonzaKrál。更新しました。 – utapyngo

関連する問題