Я реализовал поиск по триграмме схожести с аннотацией, которая дает мне именно то, что я хочу с точки зрения результатов; но у меня в базе данных 220 000 записей, и поиск занимает 5+ секунд на запрос, что слишком долго.
Поиск ведется по 3 столбцам, и один из них вызывает соединение. Как мне добавить индекс или эквивалент SearchVectorField, но для Trigram, чтобы ускорить мой запрос?
См. Текущий код ниже:
trig_vector = (
TrigramSimilarity("make__name", text)
+ TrigramSimilarity("model", text)
+ TrigramSimilarity("specification", text)
)
query_set = (
cls.objects.annotate(similarity=trig_vector)
.filter(similarity__gt=0.5)
.order_by("-similarity")
)
Я пробовал создать свой собственный индекс из различных сообщений, но я не слишком знаком с индексами, и каждый из них не влияет на время запроса.