Ich habe ein Modell wie dieses:
class CampaignPermittedURL(models.Model):
hostname = models.CharField(max_length=255)
path = models.CharField(max_length=255,blank=True)
Regelmäßig bekomme ich eine URL, die ich in einen Hostnamen und einen Pfad aufteilen kann. Was ich möchte, ist, dass der Endbenutzer einen Hostnamen (yahoo.com) und möglicherweise einen Pfad (hochzeiten) eingeben kann.
Ich möchte herausfinden, wann eine URL nicht mit dieser Hostnamen/Pfad-Kombination übereinstimmt, wie folgt:
- Erfolg: www.yahoo.com/hochzeiten/newyork
- Erfolg: yahoo.com/hochzeiten
- Fehlschlag: cnn.com
- Fehlschlag: cnn.com/hochzeiten
Ich denke, der beste Weg dafür ist:
url = urlsplit("http://www.yahoo.com/hochzeiten/newyork")
### Aufteilen des Hostnamens und des Pfads
matches = CampaignPermittedURL.objects.filter(hostname__regex=r'(com|yahoo.com|www.yahoo.com)'), \
path__regex=r'(hochzeiten|hochzeiten/newyork)')
Hat jemand bessere Ideen? Ich verwende PostgreSQL und würde ansonsten gerne Django Full Text Search ausprobieren, bin mir aber nicht sicher, ob das sinnvoll ist oder ob es meinen Anforderungen wirklich besser entspricht. Gibt es andere Methoden, die ebenso schnell sind?
Bedenken Sie, dass meine Methode die URL erhält und das CampaignPermittedURL-Objekt möglicherweise viele hundert Datensätze haben kann. Ich suche in erster Linie nach erweiterbaren/wartbaren Lösungen, aber es muss auch effizient sein, da dies auf mehrere hundert Anfrufe pro Sekunde skaliert wird.
Ich habe auch keine Probleme damit, ein anderes Back-End zu verwenden (Sphinx?), aber mir ist es am wichtigsten, möglichst weitgehend bei Standard-Django zu bleiben.