2016-07-22 12 views
1

私はstudent_idのフィールドに設定しようとするクラスを持っています。私はelasticsearch-dsl docsからpersistent exampleを参照しています。elasticsearch dsl pythonを使用して_idとして既存のフィールドを使用します。DocType

from elasticsearch_dsl import DocType, String 

ELASTICSEARCH_INDEX = 'student_index' 

class StudentDoc(DocType): 
    ''' 
    Define mapping for Student type 
    ''' 

    student_id = String(required=True) 
    name = String(null_value='') 

    class Meta: 
     # id = student_id 
     index = ELASTICSEARCH_INDEX 

私はMetaidを設定することによって縛られ、それではない作品。

私はオーバーライドsave methodとしてソリューションを取得し、私はこの

def save(self, **kwargs): 
    ''' 
    Override to set metadata id 
    ''' 
    self.meta.id = self.student_id 
    return super(StudentDoc, self).save(**kwargs) 

を達成

>>> a = StudentDoc(student_id=1, tags=['test']) 
>>> a.save() 

がオーバーライドsave方法なしMetaから設定するための直接的な方法はありますように私は、このオブジェクトを作成するのですか?

+0

「StudentDoc」の新しいインスタンスを作成する方法も表示できますか? – Val

+0

@Valは私の質問をより多くの情報で更新しました。 – Nilesh

+0

@Val、[MetaField'](https://github.com/elastic/elasticsearch-dsl-py/blob/master/elasticsearch_dsl/document.py#L27)がありますが、そのことはわかりませんここで便利です。 – Nilesh

答えて

2

IDを割り当てるには、いくつかの方法があります。

あなたはこの枚この

a = StudentDoc(meta={'id':1}, student_id=1, tags=['test']) 
a.save() 

のようにそれを行うことができます。

a = StudentDoc(student_id=1, tags=['test']) 
a.meta.id = 1 
a.save() 

はまたES 1.5、1の前だったことに注意してくださいspecify a fieldを文書_id(あなたの場合はstudent_idでした)として使用することができますが、これは1.5では廃止され、その後はexp正式にIDを提供するか、ESがあなたのためにIDを選択するようにします。

関連する問題