1

I'm working on a simple keyword grouping tool. I want to group phrases by count of same urls in SERP.

Phrase represents keyword in search engine. SerpEntry represents link on site.

I'm looking for a way to select Phrases that have at least N same urls in SerpEntry.

Here are my models:

class Phrase(models.Model):
    text = models.CharField(max_length=1000, unique=True)
    _serp = models.OneToOneField(Serp, null=True, blank=True, related_name='phrase', db_column="serp")

class SerpEntry(models.Model):
    phrase = models.ForeignKey(Phrase, related_name='serp_entry')
    position = models.PositiveIntegerField()
    url = models.TextField(max_length=2000)
    title = models.CharField(max_length=100)
    snippet = models.TextField()

Do you have any suggestions on how to do that?

Alex T
  • 4,331
  • 3
  • 29
  • 47

1 Answers1

1

Something like this may work:

Phrase.objects.filter(serp_entry__id__gt=0, #or whatever filter you need
            ).annotate(has_count=Count('id')
            ).order_by('serp_entry__phrase', #or whatever order you need
            ).filter(has_count__gt=100)
WayBehind
  • 1,607
  • 3
  • 39
  • 58