Несколько языков в отдельных полях для 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 определение, а не сам документ, если это имеет значение.

Вернуться на верх