Django Datenbankabfrage nach mehreren Objekten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
buechse
User
Beiträge: 2
Registriert: Dienstag 13. Januar 2009, 11:14

Dienstag 13. Januar 2009, 11:25

Hallo erstmal,

ich versuche folgendes zu tun: ich habe eine URL Definiert in der beliebig viele schlüsselwörter vorkommen dürfen. Nun möchte ich alle Objekte aus der DB haben, in der alle schlüsselwörter vorkommen. Ich habe das schon mal gemacht, aber mit einer sehr unglücklichen mehtode:
ich habe mir alle Schlüsselwörter in eine Liste geschrieben und diese durchlaufen. Dann habe ich einfach jedes mal die restmenge gebildet, sodass am ende nur die übrig bleiben die auch alle schlüsselwörter haben.
Ich müsste eine Art LIKE ALL abfrage möglichkeit haben denke ich.
Ich hab das in der Doku nicht gefunden weiß jemand wo das steht?
danke schon mal

buechse
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dienstag 13. Januar 2009, 11:38

Du könntest alle Schlüsselwörter mit "|" zu einem regulären Ausdruck machen und mit diesem suchen. Das können jedoch nicht alle Datenbanken und es ist jeweils eine leicht andere Syntax.

Du könntest daher aus einer Liste "content like 'x' or content like 'y' or ..." machen. Dazu gibt es bei Django das Q-Objekt, mit dem du ODER-Verknüpfungen machen kannst. Baue aus deinen Schlüsselwörtern eine Liste von Qs und übergibt diese.

Noch besser in deinem Fall scheint mir aber, das ganze einer Suchmaschine zu überlassen und nicht die Datenbank damit zu quälen. Solr ist ein Stand-alone-Lucence, für das es IIRC auch eine Python bzw. Django-Anbindung gibt. Du fütterst deine Suchmaschine dann entweder periodisch oder bei jeder neuen Eingabe mit den zu indizierenden Daten und fragst dann später die Suchmaschine nach Dingen, in denen die Schlüsselwörter vorkommen.

Stefan
Antworten