2 Stimmen

Django Haystack/Solr: Facettieren eines Modells, aber nur Ergebnisse aus einem ForeignKey-Feld anzeigen

Ich habe zwei Modelle in Django wie folgt (in Pseudo-Code)

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)

Es gibt eine 1:M. Ein Medikament kann viele Anwendungen haben.

Ich muss eine Facette auf die Felder von Application sondern zeigen nur verwandte Medicine Objekte. Ähnlich wie DISTINCT in SQL.

Was wäre der einfachste Weg, dies mit Heuhaufen zu erreichen?

Mache ich SearchIndex für Medicine o Application ? Wenn ich eine SearchIndex für Application wie erkenne/filtere ich Duplikate Medicine Objekte?

PS: Ich weiß, dass es in den Entwicklungsversionen von Solr die Funktion Field Collapsing gibt, aber ich möchte das vermeiden, weil es eine große Datenbank ist und die Leistung kritisch ist.

3voto

Mir Nazim Punkte 626

Ich habe dieses Problem mit Hilfe von Daniel Lindsay (Haystack/pySolr Autor) auf der Haystack Mailingliste gelöst.

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.

Die Indizierung nimmt einige Zeit in Anspruch, da die zu indizierenden Daten sehr groß sind, aber sie funktioniert einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X