Как создать индекс триграммы в Django 3 с несколькими столбцами

Я реализовал поиск по триграмме схожести с аннотацией, которая дает мне именно то, что я хочу с точки зрения результатов; но у меня в базе данных 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")
)

Я пробовал создать свой собственный индекс из различных сообщений, но я не слишком знаком с индексами, и каждый из них не влияет на время запроса.


person Oliver Breeden    schedule 11.06.2020    source источник
comment
этот ответ помогает?   -  person raratiru    schedule 27.12.2020