django - 从 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 很陌生
解决方案
要将 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(),
})
推荐阅读
- sql - 如何组合两个具有相同值但不相同的 INNER JOIN 的选择
- c# - 使用 Json 文件作为数据库
- vertica - 垂直表分析
- android - 如果应用程序在前台,则向状态栏发送通知
- assembly - 为什么在这种情况下可以显示一个字符,但在汇编语言中使用 `int 0x10` 的字符串却不能?
- vb.net - VB.NET 将选中的 DataGridView 行导出为 CSV
- javascript - 防止恶意用户滥用和发送未经身份验证的开放 API
- java - Hibernate:没有定义查询(没有实体类)
- email - 没有 SPF 的 DMARC
- python - FitFailedWarning:估计器拟合失败。这些参数在这个训练测试分区上的分数将设置为 nan