Django Haystack / Solr: фасетирование на модели, но показ результатов только из поля ForeignKey - PullRequest
2 голосов
/ 27 марта 2011

У меня есть две модели в Django, как показано ниже (в псевдокоде)

class Medicine(db.Model):
    field_1 = db.CharField()
    field_2 = db.CharField()

class Application(db.Model):
    field_1 = db.CharField()
    field_2 = db.CharField()
    medicine = db.ForeignKey(Medicine)

Существует 1: M.У одного лекарства может быть много применений.

Мне нужно огранить поля Application, но показать только связанные Medicine объекты.Что-то вроде DISTINCT в SQL.

Какой самый простой способ сделать это с помощью стога сена?

Можно ли сделать SearchIndex для Medicine или Application?Если я сделаю SearchIndex для Application, как я могу обнаружить / отфильтровать дубликаты Medicine объектов?

PS: я знаю, что в Dev-версиях Solr есть функция свертывания полей, но я хочу избежатьПотому что это огромная база данных и критичная производительность.

1 Ответ

3 голосов
/ 18 мая 2011

Я решил это с помощью Даниэля Линдси (автора Haystack / pySolr) в списке рассылки haystack.

from haystack import indexes

class Medicine(indexes.SearchIndex):
    field_1 = indexes.MultiValuedField(faceted=True)
    # Other field definitions


    def prepare_field_1(self, object):
        values = list()
        for app in object.applications.all():
            values.append(app.field_on_which_to_facet)
        return values

    # define "prepare_fieldname" methods for other fields in similar fashion.

Индексация занимает некоторое время, так как индексируемые данные огромны, огромны, но работают как шарм.

...