Несколько языков в отдельных полях для ElasticSearch
У меня есть приложение django и я использую django_elasticsearch_dsl_drf для управления документами для Elasticsearch (7.1) и обработки нескольких языков через django-parler.
У меня есть куча документов, и некоторые поля имеют несколько языков. Я решил разобраться с этим следующим образом:
topic = fields.ObjectField(properties={
'id': fields.IntegerField(attr='id'),
'name': StringField(
analyzer=html_strip,
fields={
'raw': StringField(analyzer='keyword'),
'suggest': fields.CompletionField()
}
),
'about': fields.ObjectField(properties={
'en': StringField(
analyzer=html_strip_english,
fields={
'raw': StringField(analyzer="keyword")
}),
'es': StringField(
analyzer=html_strip_english,
fields={
'raw': StringField(analyzer="keyword")
})
})
})
Это текст HTML на определенном языке.
Проблема в том, что en не существует, поэтому я подумал, что лучший способ сделать это - использовать prepare_en и т.д.:
def prepare_en(self, instance):
// query to get the en for that instance
Однако это приводит к ошибке VariableLookupError: Failed lookup for key [en] и это не решает проблему, когда есть несколько полей, которые имеют перевод, я не вижу разницы между about в этом случае name (если он был переведен).
Как сделать prepare для такого вложенного поля, и если есть способ, то как сделать различие между двумя полями? Или есть лучший способ сделать это? Это related_models определение, а не сам документ, если это имеет значение.