簡體   English   中英

使用elasticsearch dsl python DocType將現有字段用作_id

[英]use existing field as _id using elasticsearch dsl python DocType

我有課,我嘗試將student_id設置為_id字段 我指的是elasticsearch-dsl docs的持久示例

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

我通過在Meta設置id來綁定,但它不起作用。

我得到解決方案作為覆蓋save方法 ,我實現了這一點

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()

有沒有直接的方法從Meta設置沒有覆蓋save方法?

有幾種方法可以分配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之前,可以指定一個字段用作文檔_id (在您的情況下,它可能是student_id ),但在1.5中已棄用,從那時起您必須明確提供ID或讓ES選擇一個給你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM