首页 > 解决方案 > 如何在 Django 3 中创建具有多列的 Trigram 索引

问题描述

我已经使用 annotate 实现了 Trigram Similarity 搜索,它在结果方面给出了我想要的结果;但我的数据库中有 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")
)

我曾尝试从各种帖子中创建自己的索引,但我对索引不太熟悉,而且我实现的每一个都对查询时间没有影响。

标签: pythondjangopostgresqlfull-text-searchtrigram

解决方案


推荐阅读