2

我在 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 实现这一目标的最直接方法是什么?

我是SearchIndex为了Medicine还是Application?如果我SearchIndexApplication,我如何检测/过滤重复的Medicine对象?

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

4

1 回答 1

3

我在 haystack 邮件列表上的 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.

索引需要一些时间,因为要索引的数据非常庞大,但工作起来很有吸引力。

于 2011-05-18T19:25:59.297 回答