Django Trigram Similarity для списка строк в Postgres

У меня есть список имен ["May", "Brown", "Chaplin", etc...], содержащий около 200 имен. Для каждой строки имени я хочу вернуть соответствующий объект из базы данных, используя Django TrigramSimilarity.

Обычно я делаю примерно следующее:

result = []
for surname in surnames:
    person = Person.objects.annotate(
        similarity=TrigramSimilarity("surname", surname)
    )
    .filter(similarity__gt=0.3)
    .order_by("-similarity").first()

    if person:
        result.append(person)

но выполнение 200 запросов подряд не кажется очень оптимальным. Есть ли способ создать один запрос для этой операции? Также какие есть способы еще больше оптимизировать эту задачу?

Вот моя модель Django:

class Person(models.Model):
    name = models.Charfield(max_length=100)
    surname = models.Charfield(max_length=100)
    age = models.IntegerField()

    etc...
Вернуться на верх