所以我在Django(postgres)后端有一个搜索端点的查询,如下所示:

widgets = Widgets.objects.\
    filter(user=request.user).\
    filter(title__icontains="marketing director").\
    distinct('url')[:250]

title是一个字符字段(django中的models.CharField(max_length=255, blank=True))。
这里当然相当于Postgres中的一个查询。我特别想要这个(即:不是中缀contains搜索)。
我想加快查询速度。
似乎大多数postgres文本搜索的优化都是针对文本字段的——有没有办法加快对CHAR列的精确字符串搜索?
我可以使用Postgres三元索引,但实际上我不需要模糊/错误销售类型搜索。尽管我很乐意使用它,如果它真的因为某种原因更快的话。
或者我最好把这些列转换成文本,增加存储量命中率,并更好地索引它们?

最佳答案

使用以LIKE开头的%模式的索引的唯一方法是使用trigram索引。
定义属性为charactertext并不重要,因为它们无论如何都将转换为text
您的数据是否包含许多尾随空格?除此之外,我看不出text会如何浪费存储空间。

关于python - 优化Django中CHAR字段的postgres包含(LIKE)查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44362641/

10-16 08:13