Возвращение словаря из prepare_field - PullRequest
0 голосов
/ 26 марта 2019

Я настраиваю 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]

Если вы искали ответы в Google, но не смогли их найти.

Любая помощь приветствуется. Заранее спасибо.

P.S. Я новичок в Elasticsearch

1 Ответ

0 голосов
/ 26 марта 2019

Для сопоставления моделей django и индексов эластичного поиска я бы порекомендовал использовать django -asticsearch-dsl .

. Он также позволяет индексировать всю необходимую вам информацию о ваших FK и обратных отношениях.

Пример из документов:

@car.doc_type
class CarDocument(DocType):
    ads = fields.NestedField(properties={
        'description': fields.TextField(analyzer=html_strip),
        'title': fields.TextField(),
        'pk': fields.IntegerField(),
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...