python - 使用现有字段作为 _id 使用 elasticsearch dsl python DocType

标签 python elasticsearch elasticsearch-dsl

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

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 来绑定(bind),但它不起作用。

我得到的解决方案是覆盖 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 方法?

最佳答案

有几种分配 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 为您挑选一个。

关于python - 使用现有字段作为 _id 使用 elasticsearch dsl python DocType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533990/

相关文章:

python - 如何并行并发 HTTP 请求

elasticsearch - 测试 Elastic Search 时如何关闭缓存

elasticsearch - FOS Elastica——获取查询的字符串表示

elasticsearch - 每天的文档数存储桶并应用了一些过滤器

elasticsearch - Bool过滤器中的Elasticsearch术语和范围

python - Cron 在本地主机上工作,但在部署 App Engine 时不工作

python - 如何访问数据框中包含字典字符串数据的列的内容

python - Tensorflow 中的反向传播(通过时间)代码

elasticsearch - 安装Marvel插件Elasticsearch时出现问题

elasticsearch - ElasticSearch查询速度慢,并且第一次查询总是花费太多时间