2

私はDjangoに次のような2つのモデルを持っています(擬似コードで)

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があります。1つの薬には多くの用途があります。

のフィールドをファセットする必要がありますが、関連するオブジェクトApplicationのみを表示します。MedicineSQLのDISTINCTのようなもの。

干し草の山でこれを達成するための最も簡単な方法は何でしょうか?

私はのために作るSearchIndexのですMedicineApplication?を作成する場合SearchIndex、重複するオブジェクトApplicationを検出/フィルタリングするにはどうすればよいですか?Medicine

PS:Solrの開発リリースにフィールド折りたたみ機能があることは知っていますが、それは巨大なデータベースであり、パフォーマンスが重要であるため、これは避けたいと思います。

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 に答える