所以我在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索引。
定义属性为character
或text
并不重要,因为它们无论如何都将转换为text
。
您的数据是否包含许多尾随空格?除此之外,我看不出text
会如何浪费存储空间。
关于python - 优化Django中CHAR字段的postgres包含(LIKE)查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44362641/