diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index 75df6f7..5dfad68 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -1187,8 +1187,28 @@ class Event(models.Model): output_field=models.IntegerField(), ) ) + with_emoji = [ + s for s in self.tags if any(char in emoji.EMOJI_DATA for char in s) + ] + if len(with_emoji) > 0: + qs = qs.annotate( + overlap_emoji_tags=RawSQL( + sql="ARRAY(select UNNEST(%s::text[]) INTERSECT select UNNEST(tags))", + params=(with_emoji,), + output_field=ArrayField(models.CharField(max_length=50)), + ) + ).annotate( + overlap_emoji_tags_count=Func( + F("overlap_emoji_tags"), + function="CARDINALITY", + output_field=models.IntegerField(), + ) + ) + else: + qs = qs.annotate(overlap_emoji_tags_count=Value(0)) + else: - qs = qs.annotate(overlap_tags_count=Value(1)) + qs = qs.annotate(overlap_tags_count=Value(0)) if self.exact_location: qs = ( @@ -1216,7 +1236,8 @@ class Event(models.Model): ) ) .annotate( - score=F("overlap_tags_count") * 30 + score=F("overlap_tags_count") * 20 + + F("overlap_emoji_tags_count") * 40 + F("similarity_title") * 2 + F("similarity_description") * 10 + 10 / (F("distance") + 1)