Amélioration recherche événements similaires

Fix #400
This commit is contained in:
Jean-Marie Favreau 2025-04-27 11:17:19 +02:00
parent e54ef63b01
commit ceaf13085a

View File

@ -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)