J'ai un modèle comme celui-ci:efficace Django QuerySet regex
class CampaignPermittedURL(models.Model):
hostname = models.CharField(max_length=255)
path = models.CharField(max_length=255,blank=True)
Sur une base régulière, je vais être remis une URL, que je peux urlsplit en un nom d'hôte et un chemin. Ce que je voudrais, c'est que l'utilisateur final puisse entrer un nom d'hôte (yahoo.com) et éventuellement un chemin (mariages).
Je voudrais trouver quand une URL ne 'match' que la combinaison nom d'hôte/chemin comme ceci:
- succès: www.yahoo.com/weddings/newyork
- succès: yahoo .com/mariages échec
- : cnn.com
- échec: cnn.com/weddings
I thi nk la meilleure façon de le faire est:
url = urlsplit("http://www.yahoo.com/weddings/newyork")
### split hostname on . and path on/
matches = CampaignPermittedURL.objects.filter(hostname__regex=r'(com|yahoo.com|www.yahoo.com)'), \
path__regex=r'(weddings|weddings/newyork)')
Est-ce que quelqu'un a de meilleures idées? J'utilise PostgreSQL et je voudrais sinon essayer Django Full Text Search mais je ne suis pas sûr si cela en vaut la peine ou si cela correspond vraiment mieux à mes besoins. Existe-t-il d'autres méthodes aussi rapides? Gardez à l'esprit que l'URL de mon méthode est transmise à ma méthode et que l'objet CampaignPermittedURL peut contenir plusieurs centaines d'enregistrements. Je cherche avant tout des solutions extensibles/maintenables, mais il faut aussi que ce soit efficace puisque cela sera réduit à plusieurs centaines d'appels par seconde.
Je suis également très bien avec l'utilisation d'un autre back-end (Sphinx?), Mais je suis très préoccupé par le fait de rester avec le Django standard au plus haut degré possible.
Bonne utilisation de '__iregex' de django, puisque la partie domaine des URL est insensible à la casse et c'est la seule partie qui est vérifiée dans l'expression rationnelle. Votre regex va correspondre à YAHOO.COM, comme il se doit. @ maček va manquer celui-ci. – hobs