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...