首页 > 解决方案 > 从 prepare_field 返回字典

问题描述

我正在设置 ElasticSearch,并希望按名称从相关对象中索引多个字段。您将如何以适当的方式做到这一点?我的索引如下所示:

class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr='title')
    updatedAt = indexes.DateTimeField(model_attr='updatedAt')
    date = indexes.DateTimeField(model_attr='date', null=True)
    description = indexes.CharField(model_attr='description')

    annotations = indexes.CharField(faceted=True)
    companies = indexes.MultiValueField(faceted=True)

现在我想将公司作为字典访问,所以在我的模板中我可以执行以下操作:

{% for comp in companies %} 
 {{ comp.dnbNumber }}
 {{ comp.primaryName }}
{% endfor %}

到目前为止,我尝试过:

def prepare_companies(self, obj):
        return [{company['dnbNumber'], company['primaryName'], company['cleanName']} for company in obj.companies.all()
                .values('dnbNumber', 'primaryName', 'cleanName')]

def prepare_companies(self, obj):
        companies = [(company['dnbNumber'], company['primaryName'], company['cleanName']) for company in obj.companies.all()
                .values('dnbNumber', 'primaryName', 'cleanName')]
 return [{'dnbNumber': comp[0], 'primaryName': comp[1], 'cleanName':comp[2]} for comp in companies]

如果一直在谷歌搜索答案,但没有找到任何答案。

任何帮助表示赞赏。先感谢您。

PS 我对 Elasticsearch 很陌生

标签: djangoelasticsearch

解决方案


要将 django 模型映射到 elasticsearch indeces,我建议使用django-elasticsearch-dsl

它还允许索引您需要的有关 FK 和反向关系的所有信息。

来自文档的示例:

@car.doc_type
class CarDocument(DocType):
    ads = fields.NestedField(properties={
        'description': fields.TextField(analyzer=html_strip),
        'title': fields.TextField(),
        'pk': fields.IntegerField(),
    })

推荐阅读