dynamicField в конфигурации SOLR для django-haystack - PullRequest
1 голос
/ 18 ноября 2011

Как настроить search_indexes.py для индексации динамических полей в django-haystack.Я использую SOLR в качестве поисковой системы для стога сена.

Ответы [ 3 ]

1 голос
/ 01 августа 2014

Если вы используете управляющую команду Haystack build_solr_schema для создания schema.xml, обратите внимание, что она автоматически включает в себя различные динамические поля для популярных типов полей. Например, проверьте шаблон схемы для Haystack v2.1 . (Похоже, он был там с Haystack v1.)

Это позволяет вам создавать динамически именованные поля в методе подготовки вашего поискового индекса. Например, если вы индексировали заметки, которые могли бы содержать строку идентификатора для вашей постоянно меняющейся группы партнеров, вы могли бы сделать это:

def prepare(self, obj):
    self.prepared_data = super(NoteIndex, self).prepare(obj)
    for (partner_name, partner_id) in get_partners():
        self.prepared_data['%s_s' % partner_name] = partner_id
    return self.prepared_data

Ключевым моментом здесь является то, что имя поля заканчивается на "_s", что в соответствии со схемой является динамическим именем для строковых типов.

К сожалению, эти динамические партнерские поля не определены явно в верхней части вашего класса SearchIndex. Вы можете упомянуть об этом в комментарии.

0 голосов
/ 12 мая 2015

Как говорят @ nofinator , вы можете сделать это в методе .prepare класса SearchIndex, связав имя поля с префиксом из SOLR Schema.xml.

По умолчанию Haystack (текущая версия 2.1.1) поставляется с некоторым динамическим полем по умолчанию, таким как *_s.Но если вы хотите, вы можете создать свой собственный DynamicField.

В моем проекте я плохо создаю поле attr_* и его работа работает нормально.

Все, что вам нужно сделать, это добавить это поле с помощьютот же синтаксис в Schema.xml Вы можете выполнить в ручном режиме или переопределить стандартную команду управления Haystack build_solr_schema. (Кстати, она использует стандартный шаблон рендеринга django fnc., так что это довольно просто.

0 голосов
/ 18 ноября 2011

Насколько я вижу в исходном коде django-haystack 1.2. * Вы не можете этого сделать. Вы можете написать собственную схему вместо генерации ее с помощью команд управления и использовать ее.

...