【问题标题】:use existing field as _id using elasticsearch dsl python DocType使用elasticsearch dsl python DocType将现有字段用作_id
【发布时间】:2016-11-26 19:15:57
【问题描述】:

我有课,我尝试将student_id 设置为 中的_id 字段。我指的是来自 elasticsearch-dsl 文档的persistent example

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

有没有直接从Meta 设置而不覆盖save 方法的方法?

【问题讨论】:

  • 你能否展示一下你是如何创建一个 `StudentDoc` 的新实例的?
  • @Val 用更多信息更新了我的问题。
  • @Val,有MetaField,但我不知道这里会有用。

标签: elasticsearch python elasticsearch elasticsearch-dsl


【解决方案1】:

有几种分配 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 之前,可以将 specify a field 用作文档 _id(在您的情况下,它可能是 student_id),但这已在 1.5 及以后被弃用你必须明确提供一个 ID 或让 ES 为你挑选一个。

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 2016-04-24
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多