Django Haystack / Solr:面向模型但仅显示来自ForeignKey字段的结果

时间:2011-03-27 18:09:22

标签: django solr django-haystack faceted-search

我在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个对象。类似于SQL中的DISTINCT。

用haystack实现这一目标最直接的方法是什么?

我是否SearchIndexMedicine Application?如果我为SearchIndex设置Application,如何检测/过滤重复的Medicine个对象?

PS:我知道Solr的开发版本中有Field Colpsing功能,但我想避免这样做,因为它是巨大的数据库和性能关键。

1 个答案:

答案 0 :(得分:3)

我在干草堆邮件列表上的Daniel Lindsay(Haystack / pySolr作者)的帮助下解决了这个问题。

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.

索引需要一些时间,因为要编制索引的数据量很大,但却很有魅力。